Mongoose 在 Select 中添加条件

Mongoose add condition in Select

我想根据条件获取 mongoose 中的特定字段。这就是我想要的案例场景 这是数据:

{
    ...
    businessInfo: {
        isBusinessVerified: true
        categories: [...]
    }
    ...
}

并且我希望当 isBusinessVerified 对 return 整个 businessInfo 对象为真时,如果不是 return,则仅 businessInfo 具有 isBusinessVerified 字段

这是我现在的实现:

    const condition = {
      ...
      businessInfo: {
        $cond: [
          {
            $eq: ['$businessInfo.isBusinessVerified', true],
          },
          '$businessInfo',
          '$$REMOVE',
        ],
      },
    };
    const userData = await userProvider.findOne({ _id: userId }, condition);

此外,这是有效的,但我没有得到 businessInfoisBusinessVerified 只在里面。 我收到了这个错误但是它的工作 server error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

您实际上在使用 $cond 处理您的 businessInfo 对象的正确轨道上。只需将简单的情况(即仅返回标志)放在 else 中就可以了。

db.collection.aggregate([
  {
    "$addFields": {
      "businessInfo": {
        "$cond": {
          "if": "$businessInfo.isBusinessVerified",
          "then": "$businessInfo",
          "else": {
            businessInfo: {
              isBusinessVerified: "$businessInfo.isBusinessVerified"
            }
          }
        }
      }
    }
  }
])

这里是Mongo playground供大家参考。