【问题标题】:Find id that are not present in DB查找数据库中不存在的 id
【发布时间】:2020-10-09 22:30:48
【问题描述】:

以下查询将返回对象,这些对象存在于 DB 中并与列表中的一个 id 匹配:

db.intervention.find( { _id: { $in: [ ObjectId("5f7fc2c3e21da01ffe711e48"), ObjectId("5f7fc255555da01ffe711e48") ] } } )

我需要的是相反的:传递一个 id 列表,并获得一个在 DB 中找不到的 id 列表作为响应。

示例: 在 DB 我有 ["A", "B", "C", "D", "E"]

查询:

db.intervention.find( { _id: { $something: ["D", "E", "F", "G"] } })

我想要的响应是 ["F", "G"] -> 列表中(在查询中)但不在数据库中的 id。

我是 Mongo 的新手,不知道如何实现。

多谢

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    这将完成这项工作。但是您必须在查询中提供 2 次 ID 数组。 假设你有 id。 [84、75、76、70、71、50、12]。并且数据库在数据库中没有 50 和 12。那么..

    db.intervention.aggregate([
        {
            $match: {
                _id: {$in: [84, 75, 76, 70, 71, 50, 12]}
            }
        },
        {
            $group: {
                _id: null,
                foundIds: {$push: "$_id"}
            }
        },
        {
            $project: {
                notFoundIds: {$setDifference: [ [84, 75, 76, 70, 71, 50, 12], "$foundIds"]}
            }
        }
    
    ])
    

    这将导致:

    {
        "_id" : null,
        "notFoundIds" : [
            50,
            12
        ]
    }
    

    【讨论】:

    • 很高兴听到这个消息。 :)
    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2021-12-26
    • 2018-08-31
    • 1970-01-01
    • 2023-03-03
    • 2021-12-11
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多