请问mongoose中把数组数据并组合?

新手上路,请多包涵

一个doc数组有_id,count属性,有6个对象

[
  { _id: new ObjectId("63735fb40e397aad61b27e1c"), count: 2 },
  { _id: new ObjectId("63735f910e397aad61b27e15"), count: 2 },
  { _id: new ObjectId("63735fd70e397aad61b27e25"), count: 3 },
  { _id: new ObjectId("637b54f8e1267c65e02c34b8"), count: 2 },
  { _id: new ObjectId("637b430be1267c65e02c3315"), count: 1 },
  { _id: new ObjectId("637b431ae1267c65e02c331c"), count: 2 }
]

一个docs数组有_id,count,name属性,有7个对象

[
  {
    count: 0,
    _id: new ObjectId("63735f910e397aad61b27e15"),
    name: '99',
  },
  {
    count: 0,
    _id: new ObjectId("63735fb40e397aad61b27e1c"),
    name: '88',
  },
  {
    count: 0,
    _id: new ObjectId("63735fd70e397aad61b27e25"),
    name: '77',
  },
  {
    count: 0,
    _id: new ObjectId("637b430be1267c65e02c3315"),
    name: '66',
  },
  {
    count: 0,
    _id: new ObjectId("637b431ae1267c65e02c331c"),
    name: '55',
  },
  {
    count: 0,
    _id: new ObjectId("637b4352e1267c65e02c3323"),
    name: '44',
  },
  {
    count: 0,
    _id: new ObjectId("637b54f8e1267c65e02c34b8"),
    name: '33',
  },
]

如何变成这个

[
  {
    count: 2,
    _id: new ObjectId("63735f910e397aad61b27e15"),
    name: '99',
  },
  {
    count: 2,
    _id: new ObjectId("63735fb40e397aad61b27e1c"),
    name: '88',
  },
  {
    count: 3,
    _id: new ObjectId("63735fd70e397aad61b27e25"),
    name: '77',
  },
  {
    count: 1,
    _id: new ObjectId("637b430be1267c65e02c3315"),
    name: '66',
  },
  {
    count: 2,
    _id: new ObjectId("637b431ae1267c65e02c331c"),
    name: '55',
  },
  {
    count: 0,
    _id: new ObjectId("637b4352e1267c65e02c3323"),
    name: '44',
  },
  {
    count: 2,
    _id: new ObjectId("637b54f8e1267c65e02c34b8"),
    name: '33',
  },
]
阅读 1.8k
1 个回答

lookup--》unwind--》project 三个管道操作

db.collection1.aggregate([
  {
    $lookup: {
      from: "collections",
      localField: "_id",
      foreignField: "_id",
      as: "joined"
    }
  },
  {
    $addFields: {
      count: { $ifNull: [ { $first: "$joined.count" }, 0 ] },
      name: { $ifNull: [ { $first: "$joined.name" }, "" ] }
    }
  },
  {
    $project: {
      joined: 0
    }
  }
])