【问题标题】:MongoDB : How to loop on a field in order to lookup each value?MongoDB:如何循环字段以查找每个值?
【发布时间】:2021-07-22 14:53:15
【问题描述】:

我需要循环产品字段以查找产品集合并检查产品类别。如果类别等于某个值,我将在当前文档中添加一个新字段。

这是我的第一个文档的示例:

{
   _id:(objId),
  'products':[
    {productId:987678},
    {productId:3456765}
}

还有我的产品文档:

{_id:(objId), category:1, name:2}

如果类别正确,我使用 addField 将其添加到我的第一个文档中:

category:true;

我不知道该怎么做。有人可以帮帮我吗?

【问题讨论】:

标签: mongodb loops aggregate lookup


【解决方案1】:

https://mongoplayground.net/p/_KeECXkJTfB ,这里我们在查找之前有展开的产品,然后比较找到的类别,然后如果找到,我们将类别设置为 true。

db.product.aggregate([
  {
    "$unwind": "$products"
  },
  {
    "$lookup": {
      "from": "category",
      "localField": "products.productId",
      "foreignField": "_id",
      "as": "inventory_docs"
    }
  },
  {
    "$unwind": {
      path: "$inventory_docs",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    "$addFields": {
      "products.category": {
        $cond: {
          if: {
            "$gt": [
              {
                $strLenCP: {
                  "$toString": {
                    "$ifNull": [
                      "$inventory_docs.category",
                      ""
                    ]
                  }
                }
              },
              0
            ]
          },
          then: true,
          else: false
        }
      }
    }
  }
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 2018-05-24
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多