【发布时间】:2016-06-01 13:05:13
【问题描述】:
我正在尝试使用 find() 方法从 MongoDB 数据库中获取一些数据,只返回那些包含指定“房间”的文档。然后,我想返回找到的房间数组的所有不同值,其键等于“品种”。我以两种不同的方式进行了尝试,但我的方法可能会有所偏离。第一种方法是链接集合方法 find() 和 distinct()。这不起作用:
这是植物列表集合的样子:
[
{
"_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);
});
});
});
我的第二种方法是用 .then() 链接承诺并使用 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?
});
});
我可以做一些不同的事情来完成这些工作,或者完全不同的方法吗?
【问题讨论】:
标签: javascript node.js mongodb