将两个类似的文档合并到MongoDB中
有没有可能在mongodb中合并两个文档 假设我有一个包含以下文档的集合:将两个类似的文档合并到MongoDB中,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,有没有可能在mongodb中合并两个文档 假设我有一个包含以下文档的集合: { "_id":ObjectId("142342432"), "name":"Chris", "surname":"Patrick", "pets":["dog", "cat"] } { "_id":ObjectId("142342752"), "name":"Chris", "surname":"Patrick", "pets":["lizard"] } more than x2000 documents 和其他一些
{ "_id":ObjectId("142342432"), "name":"Chris", "surname":"Patrick", "pets":["dog", "cat"] }
{ "_id":ObjectId("142342752"), "name":"Chris", "surname":"Patrick", "pets":["lizard"] }
more than x2000 documents
和其他一些文件。我的想法是按照名字和姓氏对每个条目进行分组,如果它们匹配,加入pets
数组$addToSet
这样做的目的是删除这两个文档,并添加一个新文档,其中包含一个新生成的id和组合。删除一个文档并将数组附加到另一个文档也可以
我的主要问题是我应该更新集合,这样它就不会只是一个转储。而且将其转储到文件中并在以后导入也不会低效
谢谢
更新:使用mongodb 3.4,您可以在单个查询中实现这一点:
- 首先,展开
arraypets
- 然后,按
和名称
分组,并将数组与姓氏
$addToSet
- 最后,使用
$out
db.collectionName.aggregate([
{ $unwind: {
path: "$pets",
preserveNullAndEmptyArrays: true
}
},
{
$group:{
_id:{
name:"$name",
surname:"$surname"
},
pets:{
$addToSet:"$pets"
},
otherField: {
$first: "$otherField"
}
}
},
{
$out:"collectionName"
}
])
感谢您的回复,我不知道
$out
操作员。您知道如果要保留文档的所有其他字段(以第一次出现为准),应该怎么做吗?@lpares12是使用$first
操作符,请参阅我的editSure,谢谢。虽然我刚刚意识到,如果文档中有pets:[]
,his将不起作用,因为执行$unwind
将忽略它们。@lpares12只需将$unwind
stage的属性设置为true以保留它们,请参阅editWhat mongod版本?@StyvaneS。我用的是Mongod3.4