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
相关产品推荐
相关产品推荐

