如何在猫鼬中仅获得一个子文档中的一项?

Gan*_*ank 1 mongoose mongodb node.js mongodb-query

ASchema={item:[BSchema]};
ASchema.findOne({item._id=xx})
Run Code Online (Sandbox Code Playgroud)

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

Nei*_*unn 5

您希望使用查询投影的位置$运算符仅返回匹配的数组元素。对于猫鼬,您可以执行以下操作:

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

或与对象配对:

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

Mongoose支持速记语法,其中包括与字段相同的选项,例如“ -fieldname”用于字段删除{ "fieldname": 0 }。但是您不能将包含和排除混合在一起,但根_id字段除外。

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

另请参见.select()猫鼬文档。