node.js - 如何使用聚合获取猫鼬的默认值
问题描述
我在nodejs中使用猫鼬。
所以我定义了一个模式如下。
const userSchema = new mongoose.Schema({
name: {
type: String,
default: 'kim'
})
当我使用“findOne”时,它默认提供“名称值”,即使它的文档中没有字段。
但是当我使用'$project of aggregate'时,没有名称字段,当没有名称值时。
如何使用聚合获得默认值?
我正在使用“mongo 3.6”和“AWS 的 documentDB”。
非常感谢您阅读它。
解决方案
Mongoose 应用默认客户端,聚合运行服务器端,它对 Mongoose 模式甚至 nodejs 一无所知。
如果要为缺少的字段分配默认值,则需要通过在 $project 前面添加一个额外的阶段来修改管道,以使用$mergeObjects 运算符显式应用默认值:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
"name": "kim"
},
"$$ROOT"
]
}
}
},
{ $project: {...} }
])
如果默认值在某个时候发生更改,您将负责维护它以与架构保持同步。
推荐阅读
- android - 将广告依赖项更新到最新版本后出现构建错误
- equation - 求解具有复共轭的两个未知数的两个方程
- reactjs - 我怎么能在类组件中写这个
- r - 传播或 dcast 并填写计数
- vue.js - Percircle 动态数据未在 vue js 中更新
- python - 如何合并两个只有一个共同参数的数据框?
- algorithm - 我们如何比较以下大 O 符号,因为它们都是 O(X^n)?
- python - Django 模板中 {% url ...%} 与 {{ ... }} 的用法
- java - JDK11 上的 Scala 2.11.12 编译器可以为目标 jvm11 生成字节码吗?
- c# - 在没有 [DataContract] 的情况下序列化基类的私有字段