首页 > 解决方案 > MongoDB使用否定查找同一子文档中多个条件为真的记录

问题描述

我们将如何寻找在同一子文档中多个条件为真而这些条件中的至少一个被否定的记录?

db.getCollection('clients').find( { 
    data: { '$exists': true },
    'data.updates': { '$elemMatch': { 
        name: { $not: /^KB3109103/i }, 
        install_date: { $gt: 128573812 } 
    } } 
});

这将返回所有记录,因为$not在内部似乎不起作用$elemMatch

解决方案:

找到了解决方法,添加 $and (根据文档与没有相同)解决了它。

db.getCollection('clients').find( { 
    data: { '$exists': true },
    'data.updates': { '$elemMatch': { 
        $and: [
            {name: { $not: /^KB3109103/i }}, 
            {install_date: { $gt: 128573812 }}
        ]
    } } 
});

标签: mongodbmongodb-query

解决方案


推荐阅读