我有看起来像这样的猫鼬模式:
{
_id: someId,
name: 'mike',
keys: {
apiKey: 'fsddsfdsfdsffds',
secretKey: 'sddfsfdsfdsfdsds'
}
}
我当然不想把钥匙发回前面,但我想要一些指示,比如:
{
_id: someId,
name: 'mike',
hasKeys: true
}
有内置的方法可以在基于其他字段的方式上创建“字段”,还是我每次都需要获取整个文档,检查键是否为空并基于此设置对象属性?
答案 0 :(得分:1)
对于 Mongo 4.2+ 版,您要查找的内容称为 pipelined updates,它让您可以使用(受限制的)聚合管道作为更新,允许使用现有字段值。
这是一个包含您的数据的玩具示例:
db.collection.updateOne(
{ _id: someId },
[
{
"$set": {
"hasKeys": {
$cond: [
{
$ifNull: [
"$keys",
false
]
},
true,
false
]
}
}
},
])
Mongo Playground 对于较旧的 Mongo 版本,您必须在代码中完成。
如果您不想更新实际文档而只是在获取它时填充此字段,则可以使用相同的聚合来获取文档
答案 1 :(得分:0)
您可以像这样在 mongoose 聚合中使用 $project。
$project: { hasKeys: { $cond: [{ $eq: ['$keys', null] }, false, true]}}