【发布时间】:2020-07-27 11:23:32
【问题描述】:
我有一个带有架构的集合,具有互斥字段:
{
item_id: Number, //if this field is present in document
a_item_id: Number, //then this both field doesn't exists and vice versa
h_item_id: Number, //then this both field doesn't exists and vice versa
quantity: Number,
other_field: String
}
问题:
我需要按这样的顺序通过
aggregate阶段拆分文档,这样每个包含a_item_id&&h_item_id(双)字段的文档都将成为两个单独的文档(它们应该继承它们的基本字段)
另外,重点是,我不能同时通过两个字段$group,然后$unwind,因为如果这些字段出现在文档中,它们之间的值总是不同的,喜欢:
a_item_id: 2
h_item_id: 3
因此,如果item_id 不存在于文档中,那么a_item_id 和h_item_id 将始终同时出现。 AND它们之间有不同的值。
MongoPlayground example
有没有人有任何想法分裂这对双胞胎并取得这样的结果?像这样:
{
"_id": ObjectId("5a934e000102030405000000"),
"item_id": 1,
"quantity": 1
},
{
"_id": ObjectId("5a934e000102030405000001"),
"a_item_id": 2,
"quantity": 1
},
{
"_id": ObjectId("5a934e000102030405000002"),
"h_item_id": 3,
"quantity": 1
}
附:我知道使用这个模式是完全失败的,但我没有计划它。所以我不能在我自己的图像中重新构建集合。
更新:我已经做了什么?
我正在尝试通过添加新数组并将每个文档中的每个值推送到它来解决我的问题,以供以后使用$unwind
{
$addFields: {
items_array: [
"$item_id",
"$h_item_id",
"$a_item_id"
]
}
}
【问题讨论】:
-
您可以只使用 JavaScript 更新现有文档然后为条件
{ a_item_id: { $exists: true}, h_item_id: { $exists: true} }为每个文档插入一个新文档 - 这要简单得多。 -
@prasad_。关键是:
need to split documents via aggregate stage它是巨大的聚合查询的一部分
标签: mongodb mongoose mongodb-query aggregation-framework