Mongodb 使用moongoose find()方法查询数组中的项

Mongodb 使用moongoose find()方法查询数组中的项,mongodb,mongoose,Mongodb,Mongoose,下面是我的模式的样子 const CollectionSchema = new mongoose.Schema({ since: Date, batch_id: Number, info: [InfoSchema], items: [ItemSchema] }); const ItemSchema = new mongoose.Schema({ name: String, price: Number, url: String }); 我正在查找特定商品名称的集合批

下面是我的模式的样子

const CollectionSchema = new mongoose.Schema({
  since: Date,
  batch_id: Number,
  info: [InfoSchema],
  items: [ItemSchema]
});

const ItemSchema = new mongoose.Schema({
  name: String,
  price: Number,
  url: String
});
我正在查找特定商品名称的集合批次id、集合信息、商品价格、商品url。请注意,集合有一个项目数组,我们可以假定项目名称是不同的。下面的查询(我认为)应该返回集合信息+批次id,用于包含任何名为“lego”的项目的集合

Collections.find(
  { "items.name": 'lego' },
  { info: 1, batch_id: 1 }
)
   .where("since")
   .gt(minutesAgo)

我想在回复中包括商品价格和商品url。如何更改find()调用以返回该数据?同样,添加项目:1将添加所有项目(但我只查找匹配项目的价格和url)。

您可以将
项目。价格
项目。url
放入select查询以包括缺少的字段

Collections.find(
{“items.name”:“乐高”},
{info:1,batch_id:1,“items.price”:1,“items.url”:1}
)
.何处(“自”)
.gt(分钟前)

您可以仅返回所选项目,但不幸的是,在这种情况下,您无法选择要返回项目的哪些字段(您需要使用聚合框架):

上面的查询将只返回第一个匹配项,而不是所有匹配项


这将返回集合中每个项目(而不仅仅是所选项目)的价格和url。
Collections.find(
  { "items.name": "lego" },
  { info: 1, batch_id: 1, "items.$": 1 }
)