You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB:如何按对象数组中的ID数组查询所有文档

MongoDB/Mongoose 查询:匹配数组内对象ID在指定集合中的文档

你找对路子啦!你构思的Mongoose查询语句:

db.groups.find({ "games.id": { $in: ["5a945...", "1701fa..."] } });

正是解决这个需求的标准且高效的方式,和你写的JavaScript循环逻辑完全对应。

逻辑对应拆解

你写的JavaScript伪代码是遍历games数组里的每个对象,检查其id是否存在于指定ID数组中;而MongoDB的$in操作符结合点符号"games.id",会自动帮你完成这个遍历匹配:

  • 点符号"games.id"是MongoDB专门用来查询嵌套数组中对象属性的语法,它会扫描groups文档里的games数组,只要数组内任意一个对象的id出现在目标ID数组里,整个文档就会被匹配返回。

补充注意事项

  • 如果你需要的是games数组里所有对象的id都必须在指定数组中,可以把$in换成$all操作符,但根据你的需求描述,$in是完全合适的。
  • 为了提升大数据量下的查询效率,建议给games.id字段创建索引:db.groups.createIndex({ "games.id": 1 })。

举个实际的例子,假设你的groups集合有这样的文档:

{
  _id: ObjectId("60d21b4667d0d8992e610c85"),
  groupName: "周末开黑团",
  games: [
    { id: "5a945abc1234567890abcdef", name: "原神" },
    { id: "1701fabc1234567890abcdef", name: "星穹铁道" },
    { id: "789abc1234567890abcdef12", name: "塞尔达传说" }
  ]
}

用你写的查询语句,这个文档会被成功匹配,因为它的games数组里前两个id都在你指定的目标数组中。

内容的提问来源于stack exchange,提问作者muuvmuuv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:56:19