如何在MongoDB中一次性查询嵌套对象内多数组的指定值?
MongoDB单请求跨数组成员查询方案
你可以使用MongoDB的$or逻辑操作符一次性完成两个数组的匹配查询,全程只发起一次数据库请求,完全保留原生排序规则,不需要拆分两次查询。
两种常用写法
1. 直接传入查询条件到find方法
const targetUsername = player[0].Nickname const result = await gamesSchema.find({ $or: [ { 'participants.red': targetUsername }, { 'participants.blue': targetUsername } ] })
2. 链式调用or方法(适合原有链式查询逻辑改造)
const targetUsername = player[0].Nickname const result = await gamesSchema.find() .or([ { 'participants.red': targetUsername }, { 'participants.blue': targetUsername } ]) // 原有排序、分页等逻辑可以直接加在后面,不受影响 // .sort({ _id: -1 }) // .limit(10)
逻辑说明
- MongoDB对数组字段的等值查询天然支持「检查数组中是否存在匹配元素」的能力,此处不需要额外调用
$in方法(仅当你需要同时匹配多个用户名时才需要用到$in) $or操作符会返回满足任意一个查询条件的所有文档,查询效率和单数组查询基本一致,不会额外增加性能开销- 所有原生排序、分页规则和你之前单数组查询的逻辑完全兼容,不需要做额外调整
内容的提问来源于stack exchange,提问作者Andrei Bîrgovan
相关产品推荐
相关产品推荐

