如何在MongoDB中比较两个对象(忽略键顺序)并查找匹配文档?
在MongoDB中查找objA与objB内容相同(键顺序无关)的文档
要筛选出objA和objB内容完全一致(键的顺序不影响判断)的文档,可以利用MongoDB聚合管道结合$objectToArray和$setEquals操作符实现,具体方案如下:
核心解决方案:聚合管道匹配
通过将对象转换为键值对数组,再比较两个数组的元素集合是否相等(集合不考虑元素顺序),即可判断两个对象内容是否一致。
执行以下聚合查询:
db.collection.aggregate([ { $match: { $expr: { $setEquals: [ { $objectToArray: "$objA" }, { $objectToArray: "$objB" } ] } } } ])
代码说明
$objectToArray:将objA和objB分别转换为[{k: 键名, v: 键值}, ...]格式的数组,消除对象键的顺序差异。$setEquals:检查两个数组的元素集合是否完全相同(元素顺序不影响结果),若相同则返回true,匹配该文档。$expr:允许在$match阶段使用聚合表达式进行条件判断。
验证结果
针对你提供的示例数据,执行上述查询后,将返回符合预期的结果:
[ { "objA": {"a": 1, "b": 2}, "objB": {"a": 1, "b": 2} }, { "objA": {"m": "g", "c": 5}, "objB": {"c": 5, "m": "g"} } ]
内容的提问来源于Stack Exchange,提问作者nimrod serok
相关产品推荐
相关产品推荐

