[英]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.