2016-03-02 40 views
3

型號:MongoDB中搜索如果值不存在在子陣列

示例數據:

{ 
    topic: 'First', 
    messages: [ 
{ 
     text: 'First message', 
     readByUsers: ['id1', 'id3', 'id2'] 
    }, 
    { 
     text: 'Second message', 
     readByUsers: ['id1', 'id2'] //id3 not read this 
    } 
    ] 
}, 
{ 
    topic: 'Second', 
    messages: [ 
    { 
     text: 'Third message', 
     readByUsers: ['id1', 'id3', 'id2'] 
    }, 
    { 
     text: 'Fourth message', 
     readByUsers: ['id1', 'id2', 'id3'] 
    } 
    ] 
} 

我的目標 - 獲得第一個對象,因爲第二條消息未被讀取id3用戶(該鍵不存在於readByUsers數組中)。

查詢,如: 搜索所有的文件,其中一些messages.readByUsers不包含特定的用戶id

Model.find(messages.readByUsers: {$nin: [userId]}) 
只有

作品,如果沒有的messages.readByUsers一個不包含ID,例如 Model.find(messages.readByUsers: {$nin: ['id4']}) - 返回兩個對象

回答

2

您可以通過使用$elemMatch運算符來完成此操作,該運算符查找至少一個滿足條件的元素附件:

Model.find({messages: {$elemMatch: {readByUsers: {$ne: 'id3'}}}})