我需要一个查询,只复制唯一的文件从"A“集合到"B”集合。我将创建"B“集合的索引,然后将唯一的文档从"A”复制到"B“集合。
"A“藏书有近3671945份文件。
"A“集合Mongo DB文件结构:
{
"_id" : ObjectId("5d654ed25616a9d461bc0a91"),
"aC" : "AN",
"aI" : "ABCD",
"aN" : "000000000001",
"aT" : "AB",
"pD" : "2022-11-07",
"transaction" : {
"seqNo" : 1,
"tC" : "S"
}
},
{
"_id" : ObjectId("5d654ed25616a9d461bc0a93"),
"aC" : "AN",
"aI" : "ABCD",
"aN" : "000000000001",
"aT" : "AB",
"pD" : "2022-11-07",
"transaction" : {
"seqNo" : 1,
"tC" : "S"
}
},
{
"_id" : ObjectId("5d654ed25616a9d461bc0a92"),
"aC" : "AN",
"aI" : "ABCD",
"aN" : "000000000002",
"aT" : "AB",
"pD" : "2022-11-08",
"transaction" : {
"seqNo" : 2,
"tC" : "S"
}
}现在,我将在"B“集合上创建主索引,如下所示,
{
"aC" : 1,
"aI" : 1,
"aN" : 1,
"aT" : 1,
"transaction.seqNo" : 1,
"transaction.tC" : 1,
"pD" : 1
}请您帮助我查询唯一的文档,从"A“集合到"B”集合,基于"B“集合上启用的索引?
在查询方面需要帮助。
提前谢谢。
发布于 2022-11-07 08:25:59
使用$group和$first对每个分组选择一个文档。保存$$ROOT,然后用保存的$$ROOT替换。最后使用$merge保存到集合B。
db.collection.aggregate([
{
"$group": {
"_id": {
"aC": "$aC",
"aI": "$aI",
"aN": "$aN",
"aT": "$aT",
"seqNo": "$transaction.seqNo",
"tC": "$transaction.tC",
"pD": "$pD"
},
doc: {
$first: "$$ROOT"
}
}
},
{
"$replaceRoot": {
"newRoot": "$doc"
}
},
{
"$merge": {
"into": "B",
"on": "_id",
"whenMatched": "replace"
}
}
])附带注意:您可能希望在创建索引之前执行插入,以提高写入速度。
https://stackoverflow.com/questions/74342487
复制相似问题