我有以下架构:
const userSchema = new Schema({
local: {
email: {type: String, unique: true, lowercase: true, trim: true, required: true},
password: {type: String, required: true},
},
Items: [{
name: {type: String, trim: true},
createdAt: {type: Date, default: Date.now, select: false}
}]
});
如何根据我将从url参数收到的特定_id查询'Items'
(包含对象数组)?
我有许多不同的变体,包括下面显示的变体,但它们似乎都返回包含所有对象的Items数组,而不是只返回与id匹配的单个对象?
User.findById(req.user.id, {}, {"Items._id": req.params.id}, (err, result) => { ... }
答案 0 :(得分:0)
您尝试执行的操作是查询子文档。查看http://mongoosejs.com/docs/subdocs.html
您可以执行以下操作:
User.findById(req.user.id, (err, user) => {
let item = user.Items.id(req.params.id);
});
答案 1 :(得分:0)
您必须使用$projection
来访问嵌入式阵列中的元素。查询部分找到匹配的数组元素并用匹配元素的数组索引替换占位符$
,而$
的投影部分现在将使用占位符值将数组元素作为响应投影。 / p>
Mongo Shell Variant:db.users.findOne({_id:req.user.id, "Items._id": req.params.id},{"Items.$": 1})
猫鼬变体:User.findOne({_id:req.user.id, "Items._id": req.params.id},{"Items.$": 1}, (err, result) => { ... }