如何合并 MongoDB 中的对象
how to merge the objects in MongoDB
说明:合并对象,t_f
和t_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"] } } },
])
说明:合并对象,t_f
和t_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"] } } },
])