如何使用猫鼬返回基于其他字段的字段

时间:2021-04-29 11:25:05

标签: node.js mongodb mongoose

我有看起来像这样的猫鼬模式:

{
    _id: someId,
    name: 'mike',
    keys: {
        apiKey: 'fsddsfdsfdsffds',
        secretKey: 'sddfsfdsfdsfdsds'
    }
}

我当然不想把钥匙发回前面,但我想要一些指示,比如:

{
    _id: someId,
    name: 'mike',
    hasKeys: true
}

有内置的方法可以在基于其他字段的方式上创建“字段”,还是我每次都需要获取整个文档,检查键是否为空并基于此设置对象属性?

2 个答案:

答案 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]}}