如何使用聚合获取猫鼬的默认值

时间:2020-06-08 10:46:18

标签: node.js mongodb mongoose

我在nodejs中使用猫鼬。
因此,我定义了以下架构。

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

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

1 个答案:

答案 0 :(得分:1)

Mongoose在客户端应用默认设置,聚合在服务器端运行,并且对Mongoose模式甚至Node.js一无所知。

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

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

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