通过_id对Mongoose查询对象数组

时间:2017-03-22 22:49:42

标签: node.js mongodb mongoose

我有以下架构:

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) => { ... }

2 个答案:

答案 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) => { ... }