Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb中的多字段不同聚合_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb中的多字段不同聚合

Mongodb中的多字段不同聚合,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一些这样的文件 { name: 'John', likes: ['reading', 'cars'], dislikes: ['trees', 'cats']}, { name: 'Ally', likes: ['drawing', 'cars'], dislikes: ['people', 'cats']}, { name: 'Michelle', likes: [], dislikes: ['trees', 'cats']}, 我希望聚合像这样返回每个字段的所有唯一值 { nam

我有一些这样的文件

{ name: 'John', likes: ['reading', 'cars'], dislikes: ['trees', 'cats']},
{ name: 'Ally', likes: ['drawing', 'cars'], dislikes: ['people', 'cats']},
{ name: 'Michelle', likes: [], dislikes: ['trees', 'cats']},
我希望聚合像这样返回每个字段的所有唯一值

{ 
  name: ['John', 'Ally', 'Michelle'],
  likes: ['reading', 'cars', 'drawing'],
  dislikes: ['trees', 'cats', 'people']
}
请注意,
名称
字段不是数组,其他字段是数组,并且并非所有文档都包含一些数组,比如没有
likes
的Michelle。我用$unwind尝试了几种$group方法,它们要么没有正确地包含所有的名称(100个唯一的名称,但只返回10个),要么由于一些文档没有包含诸如“likes”之类的字段而导致混乱。为此我绞尽脑汁,谢谢你的帮助。

一个和所有键:

db.collection.aggregate([
{“$unwind”:{“path”:“$likes”,“preserveNullAndEmptyArrays”:true},
{“$unwind”:{“path”:“$DISQUICES”,“PREVENULLANDEMPTYARREARS”:true},
{“$组”:{
“_id”:空,
“名称”:{“$addToSet”:“$name”},
“likes”:{“$addToSet”:“$likes”},
“不喜欢”:{“$addToSet”:“$dislikes”}
}},
{“$project”:{
“_id”:0,
“姓名”:{
“$filter”:{
“输入”:“$name”,
“as”:“el”,
“cond”:{“$ne”:[“$$el”,null]}
}
},
“喜欢”:{
“$filter”:{
“输入”:“$likes”,
“as”:“el”,
“cond”:{“$ne”:[“$$el”,null]}
}
},
“不喜欢”:{
“$filter”:{
“输入”:“$dislikes”,
“as”:“el”,
“cond”:{“$ne”:[“$$el”,null]}
}
}
}}
])
如果确实必须删除
null
值,请使用and