光标映射和每个不工作,mongodb&猫鼬

时间:2014-06-25 18:14:28

标签: node.js mongodb cursor mongoose

我正在尝试查找集合中的所有文档,其中的字段是一个数组,其元素与请求中的某个参数匹配。我已经完成以下任务,但这两种方法似乎都没有效果。我正在使用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'。

任何帮助都会很棒!谢谢!

1 个答案:

答案 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()一样。