有没有办法在mongodb中合并两个文件?
想象一下,我有一个包含这些文件的集合:
{ "_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
答案 0 :(得分:3)
您可以在一个查询中实现此目的:
pets
数组name
和surname
分组,并将数组与 $addToSet
$out
小心,这会覆盖原始收藏品! 在运行此之前,您应该创建当前集合的转储以避免任何数据丢失
这是查询:
db.collectionName.aggregate([
{ $unwind: {
path: "$pets",
preserveNullAndEmptyArrays: true
}
},
{
$group:{
_id:{
name:"$name",
surname:"$surname"
},
pets:{
$addToSet:"$pets"
},
otherField: {
$first: "$otherField"
}
}
},
{
$out:"collectionName"
}
])