我想用mongoose model aggregate查询$project,如果字段存在,但不是它的值.

$project: {
    b: {
        $cond: {
            if    : {$exists: ['$b', true]},
            then  : true,
            else  : false
        }
    }
}

但是,我必须在$cond运算符中使用boolean表达式.

{$eq: ['$b', undefined]}

它产生了预期的结果,但由于某种原因,mongooseaggregate的结果总是true.

例如,如果我有以下文件:

{
    "a" : 1,
    "b" : 2
},
{
    "a" : 1
}

我需要以下结果:

{
    "b": true
},
{
    "b": false
}

我怎么能用mongoose来做这样的事?

推荐答案

MongoDB中的aggregate查询不支持$exists.所以在aggregate查询中,可以使用$ifNull而不是$exists.

语法:

{ $ifNull: [ <expression>, <replacement-expression-if-null> ] }

for more

Updated:

要获得b个值作为truefalse,可以try 此查询

db.test.aggregate([
    {
        $project: {
            b: { 
                $cond: [
                    {$ifNull: ['$b', false]}, // if
                    true, // then
                    false // else
                ]
            }
        }
    }
])

Explanation:

b = $cond: [ 'if condition satisfied', 'then true', 'else false' ];

在哪里condition = {$ifNull: ['$b', false]}

如果是condition = true,那么返回then result,这意味着b = true

Mongodb相关问答推荐

通过mongoDB中的查找从管道中删除被阻止的用户

如何在Golang保存到MongoDB时排除空数据值的问题?

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

使用Go的Mongo驱动程序,从MongoDB文档中获取元素并更新其值需要帮助

Mongodb 按数组元素聚合组

MongoDB:通过嵌套数组中的最后一个元素值获取文档

程序可以运行,但我不断收到发送到客户端后无法设置标题,我应该忽略它吗?

Mongoose 和 MongoDB,如何在具有多个引用的两个模型之间创建关系?

mongoDB vs mySQL - 为什么在某些方面比另一个更好

删除一对一和一对多引用 - Mongoose

Mongo 无法启动

Mongodb插入没有_id字段的文档

Node.js 和 Passport 对象没有方法 validPassword

$elemMatch 的 MongoDB 索引

使用 MongoDB Java 驱动程序将 DBObject 转换为 POJO

如何从 Mongoose 模型对象中获取集合名称

pre save和validate之间的mongoose区别?什么时候用哪一个?

多次使用位置 `$` 运算符来更新嵌套数组

处理Mongodb连接的正确方法是什么?

mongodb & max connections最大连接数