如何有条件地从 MongoDB 中的对象数组中删除一个字段?

蠕变死亡

我有一个Listing包含以下文档集合:

{
  owner: ObjectId('12345678'),
  bids: [
    {
      amount: 36,
      date: 2021-06-23T21:00:00.000+00:00,
      placedBy: ObjectId('1111111')
    },
    {
      amount: 16,
      date: 2021-06-23T21:00:00.000+00:00,
      placedBy: ObjectId('22223332')
    }
  ]
}

我需要查询bids数组,但只有在满足条件时才删除该字段placedBy(对于数组中的所有元素)这是我到目前为止:

async getBids(listingId: string, user: UserDocument) {
        return this.listingModel.aggregate([
            { $match: { _id: Types.ObjectId(listingId) } },
            {
                $project: {
                    'bids.date': 1,
                    'bids.amount': 1,
                    'bids.placedBy': {
                        $cond: {
                            if: {
                                '$eq': ['$owner', Types.ObjectId(user.id)]
                            },
                            then: '$bids.placedBy',
                            else: '$$REMOVE'
                        }
                    }
                }
            }
        ])
    }

这适用于条件为false(bids.placedBy已删除) 时,但是当条件满足时,我得到了这个 (bids.placedBy变成了所有placedBys的数组):

bids: [
    {
      amount: 36,
      date: 2021-06-23T21:00:00.000+00:00,
      placedBy: [
        ObjectId('1111111'),
        ObjectId('22223332')
      ]
    },
    {
      amount: 16,
      date: 2021-06-23T21:00:00.000+00:00,
      placedBy: [
        ObjectId('1111111'),
        ObjectId('22223332')
      ]
    }
  ]

我怎样才能解决这个问题?

当然

您可以使用$map循环遍历数组并设置条件

db.collection.aggregate([
  {
    $project: {
      "bids": {
        "$map": {
          "input": "$bids",
          "in": {
            amount: "$$this.amount",
            date: "$$this.date",
            placedBy: {
              $cond: [ { "$eq": [ "$owner", 1 ] }, "$$this.placedBy", "$$REMOVE" ]
            }
          }
        }
      }
    }
  }
])

工作Mongo 游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于MongoDB聚合中数组内的另一个字段有条件地为父字段设置值?

如何有条件地从另一个集合中删除MongoDB?

如何使用PyMongo有条件地复制一个集合中的字段并将其添加到MongoDB中的另一个字段?

在mongodb项目聚合中有条件地包含一个字段(_id或其他字段)?

如何在mongodb中的聚合期间有条件地投影字段

有条件地更新mongodb中的多个条目?

mongodb聚合与$ project有条件地排除字段

如何在MongoDB集合中的所有子文档上有条件地设置新字段

如果字段是MongoDB中的字符串,如何有条件地将其转换为日期?

如何根据另一个字段更新mongodb中的数组字典元素

如何有条件地从SQL中的联接表中选择一个字段?

有条件地从数字字符串中删除最后一个字段

更新文档并创建一个字段,该字段是集合MongoDB中具有相同ID的所有对象的数组

有条件地排除在 MongoDB 中不起作用的字段

如果知道对象的一个字段的值,如何从数组中删除对象?

在 MongoDB 中,有一个对象列表,通过查询同一对象的另一个字段的值,根据对象的一个字段的值对所有文档进行排序

我希望所有唯一的数组值都集中在 mongodb 的一个字段中

在 Mongoose 和 MongoDB 中推入列表并有条件地弹出

MongoDB:GROUP BY 有条件地聚合布尔字段上的 COUNT

使用新字段插入数据或使用 updateOne mongodb 有条件地更新

MongoDB-有条件地匹配两个数组

Mongodb 比较使用一个字段与对象数组中的另一个字段

如何将一个数组字段的长度添加到Mongodb文档中的另一个字段中

如何将一个字段与mongodb中的组合字段进行比较

根据MongoDB中的另一个字段有选择地返回一个字段

如何在MongoDB中将一个字段分组并汇总一个对象(保留输出结构)中的字段?

从同一记录中的另一个字段有条件地更新一个字段

如何有条件地在熊猫中删除行

如何有条件地删除r中的列?