2017-05-25 110 views
0

如何編寫mongo查詢以獲取集合A中的所有元素,而集合B中不存在特定參數?MongoDB幫助獲取集合中的所有元素A不在集合中B

我有一個集合稱爲some_classes,看起來像這樣:

{ 
{ 
    "docid": "someID", 
    "_id": objectId(somenumbers), 
    "type": "X", 
    "id_code": { 
     "first": "364", 
     "second": "143", 
     "third": "Apple" 
    }, 
    { 
    "docid": "someID", 
    "_id": objectId(somenumbers), 
    "type": "X", 
    "id_code": { 
     "first": "364", 
     "second": "143", 
     "third": "MH" 
    } 
} 

,我有另一個集合稱爲master_classes,看起來像這樣:

{ 
    { 
     "_id": objectId(somenumbers), 
     "id_code": { 
      "first": "364", 
      "second": "143", 
      "third": "MH" 
     }, 
     { 
     "_id": objectId(somenumbers), 
     "id_code": { 
      "first": "364", 
      "second": "143", 
      "third": "ZH" 
     }, 
    } 

我需要在some_classes所有元素docid =「someID」和type =「x」,它們在master_classes中沒有匹配的「id_code」。

有沒有一種有效的方法來實現這個目標?我想也許我可以使用聚合和查找來完成此操作,但我並不完全確定。

+0

你嘗試過什麼? –

+0

我還在研究。我是mongodb查詢的新手。我從一個包含我需要的元素的DBCursor開始,但我不認爲這是正確的方法。 – user1695758

+0

mongodb沒有加入。你應該聚合兩個收集。搜索$查找功能。 – barbakini

回答

1

您無法在MongoDB中一次對多個集合執行查詢。你將不得不做兩個分開的查詢和使用$nin操作來篩選出結果:

首先你會得到所有不同id_codesmaster_classes

const ids = db.master_classes.distinct("id_code")  

現在你翻車機出從some_classes是結果已在先前的id變量:

db.some_classes.find({ 
    docid: "someID", 
    type: "x", 
    id_code: { $nin: ids } 
}); 
相關問題