在mongodb中,我有一个集合,其中数组有重复的条目,如
{
"_id": ObjectId("57cf3cdd5f20a3b0ba009777"),
"Chat": 6,
"string": [
"1348157031 Riyadh",
" 548275320 Mohammad Sumon",
" 1348157031 Riyadh",
" 548275320 Mohammad Sumon",
" 1348157031 Riyadh",
" 1348157031 Riyadh"
]
}
我需要删除重复的数组,只保留唯一的数组值,如下所示。
{
"_id": ObjectId("57cf3cdd5f20a3b0ba009777"),
"Chat": 6,
"string": [
"1348157031 Riyadh",
" 548275320 Mohammad Sumon",
]
}
最好的方法是什么
谢啦
Mongo 3.4具有$添加字段聚合阶段,可以避免显式列出要保留的所有其他字段:
collection.aggregate([
{"$addFields": {
"string": {"$setUnion": ["$string", []]}
}}
])
仅供参考,下面是另一种(更冗长的)使用$replaceRoot的方法,也不需要列出所有可能的字段:
collection.aggregate([
{'$unwind': {
'path': '$string',
// output the document even if its list of books is empty
'preserveNullAndEmptyArrays': true
}},
{'$group': {
'_id': '$_id',
'string': {'$addToSet': '$string'},
// arbitrary name that doesn't exist on any document
'_other_fields': {'$first': '$$ROOT'},
}},
{
// the field, in the resulting document, has the value from the last document merged for the field. (c) docs
// so the new deduped array value will be used
'$replaceRoot': {'newRoot': {'$mergeObjects': ['$_other_fields', "$$ROOT"]}}
},
{'$project': {'_other_fields': 0}}
])
db.getCollection('Test').aggregate([{
$unwind: '$string'},
{
$group: {
_id: '$_id',
string: {
$addToSet: '$string'
},
Chat: {
$first: '$Chat'
}
}
}
]);
O/P:这里是2“1348157031 Riyadh”,因为有一个额外的空间,它将自己定义为一个不同的实体。
{
"_id" : ObjectId("57cf3cdd5f20a3b0ba009777"),
"string" : [
" 1348157031 Riyadh",
" 548275320 Mohammad Sumon",
"1348157031 Riyadh"
],
"Chat" : 6
}
问题内容: 我使用下面的代码行遍历数据库中的一个表: 如果我打印出数组: 我会得到这个: 但是我想摆脱数组中的重复项,所以我使用 我得到下面的奇怪结果,这不是我想要的结果: 理想情况下,我认为它应该返回以下内容: 我该怎么做才能正确处理?我使用了错误的PHP语法/默认功能吗? 问题答案: 该功能将为您完成此操作。您只需要添加标志:
问题内容: 我应该读一个包含许多不同电子邮件地址的文件,并使用数组将它们打印出来。问题是我需要消除重复的电子邮件。 我能够尝试/捕捉并打印出电子邮件地址。但是,我不确定如何删除重复项。我对散列码或如何使用Set尚不了解。任何援助将不胜感激。 这是我到目前为止的内容: 问题答案: 简单的解决方案是使用Set Java, 因此设置自动删除重复值 并且在你的代码中你拥有数组,而不是将转换数组直接使用代码
这是我的数据: 使用Lodash,我如何删除具有重复id键的对象?有过滤器,地图和独特的东西,但不太确定。 我的真实数据集要大得多,有更多的键,但概念应该是一样的。
我有一个问题编码这个: 编写一个名为的静态方法,该方法将整数数组作为输入,并返回一个新的整数数组,其中所有重复项都被删除。例如,如果输入数组具有元素{4,3,3,4,5,2,4},则结果数组应为{4,3,5,2} 这是我目前所做的
我似乎找不到解决这个问题的方法,你如何从基于数组的值的数组中删除项?就像你移除一个一样? 我需要删除一些s: 这将返回一个数组,但感觉有些不对劲。若要删除一个项目,那个就可以了,但通过ID数组从数组中删除项目,我不知道从哪里开始。 在循环中,我试图使用,但un定义在数组中:: 到目前为止,React表示在循环期间无法更新状态。基于,如何使一个项目处于状态?
问题内容: 文件: 有没有办法从数组中提取特定对象?IE如何从项数组中提取ID为23的整个项对象。 我努力了: 但是我很确定我没有正确使用’pull’。据我了解,pull将从数组中拉出字段,而不是对象。 关于如何将整个对象从数组中拉出的任何想法。 另外,我尝试在mongoose / nodejs中执行此操作,也不确定这种类型的内容是否在mongoose API中,但我找不到它。 问题答案: 尝试.