如何只获取mongoose中的一个子文档项?

时间:2014-06-12 15:12:34

标签: node.js mongodb mongoose mongodb-query

ASchema={item:[BSchema]};
ASchema.findOne({item._id=xx})

它获取了一个BSchema数组,document.item是一个数组。如何只获得一个_id是xx的项目?

2 个答案:

答案 0 :(得分:5)

您希望使用查询投影的positional $运算符只返回匹配的数组元素。对于Mongoose,您可以这样做:

ASchema.findOne({"item._id": itemId},"item.$",function(err,doc) {
    console.log( doc );
});

或者在一个对象中配对:

ASchema.findOne({"item._id": itemId},{ "item.$": 1 },function(err,doc) {
    console.log( doc );
});

Mongoose支持缩写语法,使用“-fieldname”等选项进行字段删除,这与{ "fieldname": 0 }相同。但除了根_id字段之外,您不能混合包含和排除。

因此,您必须指定使用投影时要显示的所有字段。

另请参阅mongoose文档中的.select()

答案 1 :(得分:1)

我认为您的查询语法错误。尝试:

ASchema.findOne({'item._id': xx})

此链接有助于更多示例:http://mongoosejs.com/docs/queries.html