我想用find()方法從MongoDB數據庫獲取一些數據,只返回那些包含指定「房間」的文檔。然後,我想要返回找到的房間數組的所有不同值,其鍵值等於「多樣性」。我以兩種不同的方式嘗試了這一點,我可以在我的方法中脫身。第一種方法是鏈接收集方法find()和distinct()。這不起作用:在獲取請求中鏈接收集方法/承諾Node.js
這是plantList收集的樣子:
[
{
"_id": {
"$oid": "56c11a761b0e60030043cbae"
},
"date added": "10/21/2016",
"variety": "Lettuce",
"room": "Room 1"
},
{
"_id": {
"$oid": "56c11a761b0e60030043cbaf"
},
"date added": "10/21/2015",
"variety": "Tomatoes",
"room": "Room 2"
}
]
server.js
//plantList = db collection
var mongojs = require('mongojs');
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(process.env.MONGOLAB_URI, function(err, db) {
var plantList = db.collection("plantList");
app.get('/gettypesbyroom/:room', function(req, res) {
var roomReq = req.params.room;
plantList
.find({"room":roomReq})
.toArray()
.distinct("variety", function(err, docs) {
if (err) throw err;
res.json(docs);
});
});
});
我的第二個方法是鏈與承諾。然後( )並使用underscore.js來選擇房間數組的鍵(也不起作用):
app.get('/gettypesbyroom/:room', function(req, res) {
var roomReq = req.params.room;
plantList
.find({"room":roomReq})
.toArray(function(err, docs) {
if (err) throw err;
return docs;
}).then(function(docs) {
_.keys(docs, function(docs) { return docs.variety; });
}).then(function(varieties) {
res.json(varieties); //not inside scope of .get function?
});
});
有什麼我可以做不同的做法,使這些工作或完全不同的方法?
這將返回內部服務錯誤。 – muninn9
@ muninn9,錯誤說的是什麼,以及什麼是堆棧跟蹤? –
我在郵差上運行它,它只是說「500內部服務錯誤」 – muninn9