我还在学习node.js和mongodb。我试图用nodejs和mongoose编写简单的应用程序。我的猫鼬模式:
var todoSchema = new Schema({
task: String,
description: String,
date: Date,
status: String,
checklist: Boolean,
pic: String
});
我有一个名为todos
的集合我尝试使用此代码获取todos
的内容:
apiRoutes.route('/todos/detail')
.get(function(req, res){
Todo.distinct( "pic" ).each(function(doc){
Todo.find({"pic": doc.pic}, function(err, todo){
if (err)
res.send(err);
var finalResult = [];
finalResult.push(todo);
res.send(finalResult);
});
});
});
但我收到了这个错误:
Object #<Query> has no method 'each'
有什么想法解决这个问题吗?非常感谢您的帮助。
答案 0 :(得分:3)
根据我在你的问题中收集的内容,你不一定需要循环,因为你正在迭代的不同的pics数组,你用它来查询每个pic的集合,这是 实质上等同于仅查询整个集合作为发送从查询返回的结果文档数组:
apiRoutes.route('/todos/detail').get(function(req, res){
Todo.find({"pic": { "$exists": true }}, function(err, todos){
if (err) res.send(err);
res.send(todos);
});
});
除非您想获得一个独特的照片列表,否则请使用这些照片获取待办事项,您可以尝试以下方法:
apiRoutes.route('/todos/detail').get(function(req, res){
Todo.find().distinct('pic', function(error, pics) {
// pics is an array of all pics
Todo.find({"pic": { "$in": pics } }, function(err, todos){
if (err) res.send(err);
res.send(todos);
});
});
});
答案 1 :(得分:0)
首先,您应首先使用.forEach()
代替.each()
:)
在这里,您可以看到forEach doc。