【发布时间】:2017-08-15 07:14:47
【问题描述】:
我有以下架构:
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) => { ... }
【问题讨论】:
-
使用projection。类似
User.findOne({_id:req.user.id, "Items._id": req.params.id},{}, {"Items.$": 1}, (err, result) => { ... } -
仍然返回所有的项目,而不是一个单一的
-
可能是我的猫鼬查询不正确。您可以验证它在 mongo shell 中运行它。
db.users.findOne({_id:req.user.id, "Items._id": req.params.id},{"Items.$": 1})。它将返回一个项目值。我会尝试找到正确的猫鼬查询。 -
是的,它可以在 mongo shell 中工作,我应该在 mongoose 中使用它吗?还是有更有效的方法来编写它?谢谢
-
Np。是的,如果你知道如何转换为猫鼬。我相信这是猫鼬中的正确查询。
User.findOne({_id:req.user.id, "Items._id": req.params.id},{"Items.$": 1}, (err, result) => { ... }