首页 > 解决方案 > 如何使用聚合获取猫鼬的默认值

问题描述

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

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

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

标签: node.jsmongodbmongoose

解决方案


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

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

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

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


推荐阅读