首页 > 解决方案 > MongoDB $或表现得像 $and

问题描述

我正在尝试计算具有非空features数组或非空description字符串的文档数,如下所示:

collection.find({
    $or: [{
        features: {$exists: true, $not: {$size: 0}},
        description: {$exists: true, $ne: ""}
    }],
}).count()

奇怪的是(对我来说),将第二个表达式添加到$or数组中会减少匹配的数量。556 个文档具有非空features数组,294 个文档具有非空描述。在 214 个匹配项中使用$or结果将两者结合起来,它们似乎都有描述特征。我在这里想念什么?

标签: mongodbmongodb-query

解决方案


这是因为您的 2 个条件位于 $or 数组的同一项目中。所以基本上,您正在过滤满足这两个条件的文档。我认为第二个条件应该在数组的第二项中,如下所示:

collection.find({
    $or: [
    {
        features: {$exists: true, $not: {$size: 0}},
       
    }, 
    {
        description: {$exists: true, $ne: ""}
    }
],
}).count()

推荐阅读