【发布时间】:2019-03-21 05:37:33
【问题描述】:
我有以下用户收藏
[{
"_id": 1,
"adds": ["111", "222", "333", "111"]
}, {
"_id": 2,
"adds": ["555", "666", "777", "555"]
}, {
"_id": 3,
"adds": ["888", "999", "000", "888"]
}]
我需要在 adds 数组中找到重复项
预期的输出应该是
[{
"_id": 1,
"adds": ["111"]
}, {
"_id": 2,
"adds": [ "555"]
}, {
"_id": 3,
"adds": ["888"]
}]
我尝试过使用许多运算符$setUnion、$setDifference,但都没有成功。
请帮忙!!!
【问题讨论】:
-
你为什么要避开
$unwind? $unwind/$group/$match/$project 将是与迄今为止发布的答案进行比较的直接方法。另外,您使用的是哪个特定版本的 MongoDB 服务器? -
@Stennie 我正在使用最新的 mongodb 4.0。因为
$unwind产生了一些性能问题。在数组中查找重复项并不是什么大问题。应该有一些聚合运算符吗?不是吗?顺便说一句,感谢您的回复。 -
@Stennie 有 cmets 吗? ;-)
-
在 MongoDB 4.0 中,没有用于过滤数组以仅查找重复项的简写聚合运算符。有几种不同的方法可以使用现有的运算符来实现此结果,但您必须进行基准测试以比较您的用例的性能。如果这是一种常见需求,您可能需要考虑调整数据模型以提高查询效率。例如,您可以拥有一个对象数组,而不是一个值数组,这些对象的计数在添加到数组时会增加:
[{"111": 2, "222": 1, "333": 1}]。 -
您还可以在MongoDB Jira issue tracker(项目:“SERVER”,组件:“Aggregation Framework”)中提出新运算符的功能建议。这在短期内不太可能对您有所帮助,但如果其他人对相同的功能感兴趣,它可能会出现在 MongoDB 的未来版本中。
标签: node.js mongodb mongoose aggregation-framework