如何合并 MongoDB 中的对象

how to merge the objects in MongoDB

说明:合并对象,t_ft_t成为键,v成为值。在 t_f_t 对象中。之后 t_f_t 文档将合并到 data。检查预期输出。

{
  "data": {
    "2011-08-31T05:33:02Z": 1,
    "2011-09-01T12:58:33Z": 1,
 
  },
  "t_f_t": {
    "t_f": "2010-07-25T22:07:00Z",
    "t_t": "2020-10-06T21:07:00Z",
    "v": 0
  }
}

输出文件

{
  "data": {
    "2010-07-25T22:07:00Z": 0,
    "2011-08-31T05:33:02Z": 1,
    "2011-09-01T12:58:33Z": 1,
    "2020-10-06T21:07:00Z": 0,
    
  },

静态解决方案是这个:

db.collection.aggregate([
   {
      $set: {
         t: [
            { k: "$t_f_t.t_f", v: "$t_f_t.v" },
            { k: "$t_f_t.t_t", v: "$t_f_t.v" }
         ]
      }
   },
   { $set: { t: { $arrayToObject: "$t" } } },
   { $project: { data: { $mergeObjects: ["$data", "$t"] } } },
])

如果您需要更动态的,请使用

db.collection.aggregate([
   { $set: { t: { $objectToArray: "$t_f_t" } } },
   {
      $set: {
         t: {
            $map: {
               input: "$t",
               in: {
                  $cond: {
                     if: { $ne: ["$$this.k", "v"] },
                     then: { k: "$$this.v", v: "$t_f_t.v" },
                     else: null
                  }
               }
            }
         }
      }
   },
   { $set: { t: { $filter: { input: "$t", cond: "$$this" } } } },
   { $set: { t: { $arrayToObject: "$t" } } },
   { $project: { data: { $mergeObjects: ["$data", "$t"] } } },
])