2016-03-02 55 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'}}}})