簡體   English   中英

MongoDB發現所有不在此數組中

[英]MongoDB find all not in this array

我試圖找到除少數用戶以外的所有用戶,如下所示:

// get special user IDs
var special = db.special.find({}, { _id: 1 }).toArray();

// get all users except for the special ones
var users = db.users.find({_id: {$nin: special}});

這不起作用,因為我傳遞給$nin數組不是ObjectId的數組,而是{ _id: ObjectId() }的數組

第一次查詢后,變量special看起來像這樣:

[ { _id: ObjectId(###) }, { _id: ObjectId(###) } ]

但是在第二個查詢中$nin需要這個:

[ ObjectId(###), ObjectId(###) ]

如何從第一個查詢中獲取數組中的ObjectId()以便我可以在第二個查詢中使用它們?

或者,有沒有更好的方法來實現我想要做的事情?

使用cursor.map()由返回方法find()函數的列表變換{ _id: ObjectId(###) }文件的陣列ObjectId的如下面

var special = db.special.find({}, { _id: 1 }).map(function(doc){
    return doc._id;
});

您可以考慮的另一種方法是使用聚合框架中的$lookup運算符在special集合上執行“左外連接”,並在新的“已連接”數組字段上過濾文檔。 過濾器應匹配數組字段為空的文檔。

以下示例演示了這一點:

db.users.aggregate([
    {
        "$lookup": {
            "from": "special",
            "localField": "_id",
            "foreignField": "_id",
            "as": "specialUsers" // <-- this will produce an arry of "joined" docs
        }
    },
    { "$match": { "specialUsers.0": { "$exists": false } } } // <-- match on empty array
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM