Mongo Db $not $in 带有多个键的查询

时间:2021-01-07 15:19:25

标签: mongodb

我有一个 Mongo db 文档集合,其中包含 _id 、 id1、 id2,其中 (id1, id2) 是唯一的。 我想找到除 (id1, id2 的字典列表) 之外的所有文档。

换句话说,我想要除except_arr之外的所有文件。

文档示例:

{ _id: 1, id1: 25, id2: 1030 },
{ _id: 2, id1: 25, id2: 1031 },
{ _id: 3, id1: 1024, id2: 2048 },
{ _id: 4, id1: 1552, id2: 1284 }

数组示例:

except_arr = [
    {id1: 1024, id2: 2048},
    {id1: 1552, id: 1284}
]

结果应该是:

{ _id: 1, id1: 25, id2: 1030 },
{ _id: 2, id1: 25, id2: 1031 }

2 个答案:

答案 0 :(得分:4)

您要查找的名称为 $nor

db.collection.find({
  $nor: [
    {
      id1: 1024,
      id2: 2048
    },
    {
      id1: 1552,
      id2: 1284
    }
  ]
})

Playground

答案 1 :(得分:0)

在查看我评论的代码并查看 Mohamad 所说的内容后,我得到了这个解决方案:

db.getCollection('test').find({
    $or: [ 
        { id1: { $nin: [1024, 1552] } }, 
        { id2: { $nin: [2048, 1284] } }  
    ]
})

我的数据库对象:

[
    { _id: 1, id1: 25, id2: 1030 },
    { _id: 2, id1: 25, id2: 1031 },
    { _id: 3, id1: 1024, id2: 2048 },
    { _id: 4, id1: 1552, id2: 1284 },

    { _id: 5, id1: 1024, id2: 3 },
    { _id: 6, id1: 4, id2: 1284 }
]

结果:

[
    { _id: 1, id1: 25, id2: 1030 },
    { _id: 2, id1: 25, id2: 1031 },
    { _id: 5, id1: 1024, id2: 3 },
    { _id: 6, id1: 4, id2: 1284 }
]

编辑
下面是一个具有不同 id1 和 id2 的示例
*要测试的在线游乐场:https://mongoplayground.net/p/2vQyTkpgHNI
我的收藏: Collection

查询结果。 Query result