我在nodejs中使用猫鼬。
因此,我定义了以下架构。
const userSchema = new mongoose.Schema({
name: {
type: String,
default: 'kim'
})
当我使用“ findOne”时,即使它的“文档”中没有字段,它也会默认提供“名称值”。
但是当我使用“ $ project ofgregation”时,没有名称字段,没有名称值。
如何使用聚合获取默认值?
我正在使用'mongo 3.6'和'AWS的documentDB'。
非常感谢您阅读它。
答案 0 :(得分:1)
Mongoose在客户端应用默认设置,聚合在服务器端运行,并且对Mongoose模式甚至Node.js一无所知。
如果要为缺少的字段分配默认值,则需要通过在$ project前面添加一个额外的阶段来修改管道,以使用$mergeObjects operator显式地应用默认值:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
"name": "kim"
},
"$$ROOT"
]
}
}
},
{ $project: {...} }
])
如果默认值在某个时候发生更改,您将负责维护它以与架构保持同步。