mongodb - 是否可以在 Mongodb 中默认一个值,例如 $ifNull 但为空字符串?

标签 mongodb mongodb-query aggregation-framework ifnull

我喜欢使用的 mongo 运算符是 $ifNull,但有时这并不能涵盖我需要涵盖的所有情况,例如空字符串。是否有一个运算符的工作方式类似于 $ifNull 运算符(但检查其他条件,例如空字符串),所有操作只需一步即可完成?如果该值是 null 或空字符串,我只需要默认该值。以下是我当前正在执行的查询的片段:

//ex docs:
{
  "_id": "1",
  "field": {
    "value": "test"
  }
},
{
  "_id": "2",
  "field": {
    "value": ""
  }
},
{
  "_id": "3"
  "field": {
    "value": null
  }
}
//step in query where I'm checking ifNull:
...
{
    $project: {
        resValue: {
            $ifNull: ["$field.value", "No Data"]
        },
    }
}
...

我试图用谷歌搜索,但看到很多涉及 $function 的解决方案,或者只是将结果与空字符串匹配。这在我的情况下不起作用,因为我需要包含所有文档,但只需将 resValue 默认为“无数据”(如果它为空或为空)。我还试图限制复杂性并保持查询尽可能高效,因此我认为最好不要在项目之前包含 $function 步骤。

当前在我的数据库上运行版本 4.4.13。

如果字段本身存在且不是空字符串,我需要返回该值,但如果它是空字符串或 null,则返回“无数据”或其他默认字符串作为结果文档上的 resValue。

最佳答案

您已经走上了使用$ifNull的正确道路。您只需要再一个 $cond 来检查空字符串大小写。

db.collection.aggregate([
  {
    "$addFields": {
      "resValue": {
        "$cond": {
          "if": {
            $eq: [
              {
                "$ifNull": [
                  "$field.value",
                  ""
                ]
              },
              ""
            ]
          },
          "then": "No Data",
          "else": "$field.value"
        }
      }
    }
  }
])

这是Mongo playground供您引用。

关于mongodb - 是否可以在 Mongodb 中默认一个值,例如 $ifNull 但为空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72003522/

相关文章:

node.js - json数组中的 Node 分页

javascript - 创建/保存之前获取记录 `id` |风 sails Js

java - 如何通过Spring Boot获取mongoDB中的计数?

java - 如何使用 mongo java 驱动程序将实际查询记录到 MongoDB

mongodb - 从 MongoDB 中的 ObjectId 获取所有文档和项目时间戳

arrays - MongoDB 从不在其他集合中的集合中获取文档

node.js - 使用 Mongoose 按值仅查找数组数组中的项目

node.js - MongoDB。通过一次查询获取每种产品不同时间段的价格

mongodb - 从 MongoDB 中的同一数组返回包含两个字段的文档

javascript - MongoDB聚合管道: use of For loop