mongodb - MongoDB - 转换数组字段以设置
问题描述
我有一个包含可以复制的值数组的字段的文档。我想使用与该数组的唯一值相对应的额外字段来转换这些文档。我尝试了聚合 + addToSet 没有成功。
数据:
{..., "random_integers" : [1, 1, 2, 2, 3, 3]},
{..., "random_integers" : [2, 3, 4, 4, 5, 6]},
{..., "random_integers" : [9, 9, 8, 8, 7, 7]}
期待:
{
...
"random_integers" : [1, 1, 2, 2, 3, 3],
"unique_integers" : [1, 2, 3],
},
{
...
"random_integers" : [2, 3, 4, 4, 5, 6],
"unique_integers" : [2, 3, 4, 5, 6],
},
{
...
"random_integers" : [9, 9, 8, 8, 7, 7],
"unique_integers" : [7, 8, 9],
}
尝试使用聚合 + addToSet():
# Query
db.getCollection().aggregate([
{
$group: {
_id: '$_id',
unique_integers: {$addToSet: '$random_integers' }
}
}
])
# Results
{..., "unique_integers" : [[1, 1, 2, 2, 3, 3]]},
{..., "unique_integers" : [[2, 3, 4, 4, 5, 6]]},
{..., "unique_integers" : [[9, 9, 8, 8, 7, 7]]}
$addToSet 将整个列表添加到一个集合中,而不是数组的每个元素。我尝试将 $addToSet 与 $each 结合使用,但 mongo 在一个组中无法识别它:
# Query
db.getCollection().aggregate([
{
$group: {
_id: '$_id',
unique_integers: {$addToSet: { $each: '$random_integers' }}
}
}
])
# Error
Error: command failed: {
"ok" : 0,
"errmsg" : "Unrecognized expression '$each'",
"code" : 168,
"codeName" : "InvalidPipelineOperator"
} : aggregate failed
解决方案
db.ints.aggregate( [
{ $project: {
random_integers: 1,
unique_integers: { $setIntersection: [ "$random_integers", "$random_integers" ] },
_id: 0
} }
] )
推荐阅读
- java - Bitcoinj 从钱包发送付款
- c - Termcap“cl”命令不清除屏幕
- primefaces - AccordionPanel Primefaces:在选项卡中将 DIV 包装器中的标题和内容组合在一起
- c# - 如何在silverlight中将行样式添加到ListBox ItemTemplate
- cakephp - Cakephp 3 - 将数据保存到belongstomany表
- vue.js - VueJS 在每个组件上添加生命周期钩子
- python - 使用 Flask 上传文件
- regex - 过滤掉包含特殊字符的字符串的确切部分bash
- c++ - 互斥锁能否保护相对于特定指针的数据?
- angular - 当 DOM 完成渲染元素时执行一个方法