【问题标题】:How to return field based on other fields with mongoose如何使用猫鼬根据其他字段返回字段
【发布时间】:2021-07-22 18:24:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您能否展示您的架构和模型的代码以及您如何将数据发送到前端?

标签: node.js mongodb mongoose


【解决方案1】:

你可以像这样在 mongoose 聚合中使用 $project。

$project: { hasKeys: { $cond: [{ $eq: ['$keys', null] }, false, true]}}

【讨论】:

    【解决方案2】:

    对于 Mongo 4.2+ 版,您要查找的内容称为 pipelined updates,它允许您使用(受限)聚合管道作为更新,允许使用现有字段值。

    这是一个包含您的数据的玩具示例:

    db.collection.updateOne(
    { _id: someId },
    [
      {
        "$set": {
          "hasKeys": {
            $cond: [
              {
                $ifNull: [
                  "$keys",
                  false
                ]
              },
              true,
              false
            ]
          }
        }
      },
    ])
    

    Mongo Playground 对于较旧的 Mongo 版本,您必须在代码中完成。

    如果您不想更新实际文档,而只是在获取它时填充此字段,您可以使用相同的聚合来获取文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2021-01-25
      • 2020-09-29
      • 2021-03-22
      • 2023-03-20
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多