MongoDB查询需求:匹配指定角色元素或返回空数组文档
MongoDB 查询:匹配指定角色+始终返回空角色数组文档
需求说明
给定如下MongoDB文档结构:
[ { name: "Alex", role: ["player","coach"] }, { name: "John", role: ["player"] }, { name: "Jack", role: ["coach"] }, { name: "Smith", role: [] } ]
需要实现:传入指定角色列表(如['player'])时,返回所有包含该角色的文档,同时强制返回role为空数组的文档。比如传入['player']时,应返回Alex、John、Smith的文档。
实现方案
使用MongoDB的$or操作符组合两个查询条件即可满足需求:
- 条件一:
role数组包含指定角色中的任意一个(用$in匹配) - 条件二:
role是空数组(直接匹配role: [],或用$size: 0效果一致)
示例查询代码
假设传入的角色列表是targetRoles = ['player'],对应的MongoDB查询语句如下:
db.collection.find({ $or: [ { role: { $in: targetRoles } }, { role: [] } ] })
代码解释
$or:逻辑或操作,只要满足两个条件中的任意一个,文档就会被返回{ role: { $in: targetRoles } }:匹配role数组包含targetRoles中至少一个元素的文档{ role: [] }:匹配role为空数组的文档,这部分会始终被返回,不受传入角色的影响
扩展场景:传入多个角色
如果传入的是多个角色(如['player','coach']),上述查询同样适用,会返回所有包含player或coach的文档,再加上Smith的空数组文档。
内容的提问来源于stack exchange,提问作者Vivekanand Kumar
相关产品推荐
相关产品推荐

