【发布时间】:2017-06-27 13:17:25
【问题描述】:
ASchema={item:[BSchema]};
ASchema.findOne({item._id=xx})
它得到一个BSchema数组,document.item是一个数组。如何只获取 _id 为 xx 的一项?
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query
ASchema={item:[BSchema]};
ASchema.findOne({item._id=xx})
它得到一个BSchema数组,document.item是一个数组。如何只获取 _id 为 xx 的一项?
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query
您希望使用查询投影的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 字段之外,您不能混合包含和排除。
因此,您必须指定使用投影时要显示的所有字段。
另请参阅猫鼬文档中的.select()。
【讨论】:
我认为您的查询语法是错误的。试试:
ASchema.findOne({'item._id': xx})
此链接有助于获取更多示例:http://mongoosejs.com/docs/queries.html
【讨论】:
Lists.findOne({"item._id": itemId }).exec(function(err, docList) { var odds = docList.item.odds; console.log("odd:" + odds); });docList.item 是一个数组,类似于 docList.item[0],docList.item[1],但是 docList.item.odds 是未定义的,只有 docList.item[0]。补充是对的。我必须 forEach 数组来检查我想要哪个项目。