首页 > 解决方案 > 我们可以使用 mongodb 将对象值推送到 $project 中吗

问题描述

db.setting.aggregate([
  {
    $match: {
      status: true,
      deleted_at: 0,
      _id: {
        $in: [
          ObjectId("5c4ee7eea4affa32face874b"),
          ObjectId("5ebf891245aa27c290672325")
        ]
      }
    }
  },
  {
    $lookup: {
      from: "site",
      localField: "_id",
      foreignField: "admin_id",
      as: "data"
    }
  },
  {
    $project: {
      name: 1,
      status: 1,
      price: 1,
      currency: 1,
      numberOfRecord: {
        $size: "$data"
      }
    }
  },
  {
    $sort: {
      numberOfRecord: 1
    }
  }
])

如何使用项目将货币推入价格对象请指导非常感谢,也很想知道 $addtoSet 和 $push 之间有什么区别,从项目中选择它或从 $addField 修复它有什么好的选择

https://mongoplayground.net/p/RiWnnRtksb4

输出应该是这样的:

[
  {
    "_id": ObjectId("5ebf891245aa27c290672325"),
    "currency": "USD",
    "name": "Menz",
    "numberOfRecord": 0,
    "price": {
      "numberDecimal": "20",
      "currency": "USD",
    },
    "status": true
  },
  {
    "_id": ObjectId("5c4ee7eea4affa32face874b"),
    "currency": "USD",
    "name": "Dave",
    "numberOfRecord": 2,
    "price": {
      "numberDecimal": "10",
     "currency": "USD"
    },
    "status": true
  }
]

标签: mongodbaggregation-framework

解决方案


您可以直接将字段插入到对象中project,如下所示(字段price):

$project: {
      name: 1,
      status: 1,
      price: {
        numberDecimal: "$price.numberDecimal",
        currency: "$currency"
      },
      numberOfRecord: {
        $size: "$data"
      }
    }

通过使用项目进行操作,无需使用$addField.

对于和之间的区别$addToSet$push请阅读这个很好的答案


推荐阅读