【问题标题】:How to get the default value of mongoose using aggregate如何使用聚合获取猫鼬的默认值
【发布时间】:2020-09-27 07:32:03
【问题描述】:

我在 nodejs 中使用猫鼬。
所以我定义了一个模式如下。

const userSchema = new mongoose.Schema({
  name: {
     type: String,
     default: 'kim'
})

当我使用“findOne”时,它默认提供“名称值”,即使它的文档中没有字段。
但是当我使用 '$project of aggregate' 时,没有 name 字段,当没有 name 值时。
如何使用聚合获得默认值?
我正在使用“mongo 3.6”和“AWS 的 documentDB”。
非常感谢您阅读它。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    Mongoose 应用默认客户端,聚合运行服务器端,它对 Mongoose 模式甚至 nodejs 一无所知。

    如果您想为缺少的字段分配默认值,您需要通过在 $project 前面添加一个额外阶段来修改您的管道,以使用 $mergeObjects operator 显式应用默认值:

    db.collection.aggregate([
      {
        $replaceRoot: {
          newRoot: {
            $mergeObjects: [
              {
                "name": "kim"
              },
              "$$ROOT"
            ]
          }
        }
      },
      { $project: {...} }
    ])
    

    如果默认值在某个时候发生变化,您将负责维护它以与架构保持同步。

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 2015-02-27
      • 2020-11-01
      • 2019-09-06
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      相关资源
      最近更新 更多