我正在尝试查找集合中的所有文档,其中的字段是一个数组,其元素与请求中的某个参数匹配。我已经完成以下任务,但这两种方法似乎都没有效果。我正在使用node mongodb和mongoose。
var cursor = db.Item.find({ cats: { $elemMatch: req.params.cat}});
cursor.map( function(myDoc) {console.log("myDoc.name: " + myDoc.name)});
var cursor = db.Item.find({ cats: { $elemMatch: req.params.cat}});
cursor.foreach( function(myDoc) {console.log("myDoc.name: " + myDoc.name)});
我得到的错误是Object#没有方法'forEach'。
任何帮助都会很棒!谢谢!
答案 0 :(得分:1)
考虑到你使用的是Mongoose,这里有一些问题。您似乎尝试使用“shell”类型语法,但在mongoose中您使用模型定义
var itemSchema = new Schema({
cats: []
});
var Item = mongoose.model( "Item", itemSchema );
然后假设你的“cats”数组只包含字符串,如:
{
"cats": [ "fluffy", "mittens", "stripes" ]
}
然后从“model”对象发出查询,并使用$in
运算符来匹配选择。此外,由于这是“节点”,结果在回调范围内,不会作为“左侧”结果返回:
Item.find({ "cats": { "$in": [req.params.cat] } },function(err,cats) {
if ( err ) throw err; // handle errors in some way
console.log( JSON.stringify( cats, undefined, 4 ) );
});
这将简单地转储所有结果,因为它“自动”转换为数组。当然,你可以使用数组迭代器和变换器,就像这里的结果.forEach()
或.map()
一样。