我试图找到一种方法来删除除最新文档之外的所有重复文档。
[
{
id: 123,
value: "ABC",
date: "yesterday"
},
{
id: 456,
value: "DEF",
date: "today"
},
{
id: 123,
value: "XYZ",
date: "today"
},
]
我的预期输出是-
[
{
id: 456,
value: "DEF",
date: "today"
},
{
id: 123,
value: "XYZ",
date: "today"
},
]
我认为解决问题的方法-
db.collectionName.aggregate([
{
$sort: { date: -1 }
},
{
$reduce: {
input: "CURRENT_ARRAY",
initialValue: [],
in: {
$cond: [
{ "CONDITION_TO_CHECK_id_MATCHED" }
]
}
}
])
但我不能设计它应该实现的代码。
1条答案
按热度按时间gk7wooem1#
你需要通过
id
和id
取“最后一个”文档,下面是一个快速的例子:Mongo Playground
这种方法的问题在于,我们依赖于“自然”顺序来匹配最新日期,这可能适用于您的应用程序,但如果不是这样,则需要在某个字段上的组阶段之前添加一个
$sort
阶段,以确保顺序正确(如果“date”字段实际上包含日期,则它是一个很好的候选字段)。如果您使用的是Mongo 5.2以上版本,则可以使用bottom操作符来代替排序阶段。