Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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中的In运算符_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

mongodb中的In运算符

mongodb中的In运算符,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,这是我的收集结构伤害包含伤害数据我有两个伤害ID所以我不想要那些伤害 例如,我有两个ID(538D9E7ED173E5202A000065538F21868A5FC5E01F000065),然后我必须只获取前两个数组,我在运算符bt中的用户仍然获取所有3个数组。我尝试了下面的查询 db.users.find( {"injury._id":{$in:[ObjectId("538d9e7ed173e5202a000065"),

这是我的收集结构伤害包含伤害数据我有两个伤害ID所以我不想要那些伤害 例如,我有两个ID(538D9E7ED173E5202A000065538F21868A5FC5E01F000065),然后我必须只获取前两个数组,我在运算符bt中的用户仍然获取所有3个数组。我尝试了下面的查询

        db.users.find(
                   {"injury._id":{$in:[ObjectId("538d9e7ed173e5202a000065"),
                                       ObjectId("538f21868a5fc5e01f000065")]}
                   })

使用这一点,我得到了所有3个数组,这里您需要了解的是,您的查询旨在过滤“文档”,而不是过滤文档中数组的元素。为了实际筛选数组内容以获得多个匹配项,您需要使用聚合框架:

db.users.aggregate([
//匹配数组中包含这些元素的“文档”
{“$match”:{
“伤害_id”:{
“$in”:[
ObjectId(“538D9E7ED173E520A000065”),
ObjectId(“538F21868A5FC5E01F0000065”)
]
}
}},
//展开数组以反规范化为文档
{“$放松”:“$受伤”},
//匹配数组成员
{“$match”:{
“伤害_id”:{
“$in”:[
ObjectId(“538D9E7ED173E520A000065”),
ObjectId(“538F21868A5FC5E01F0000065”)
]
}
}},
//以数组形式分组
{“$组”:{
“\u id”:“$\u id”,
“伤害”:{“$push”:“$INPURY”}
}}
])
在MongoDB 2.6及更高版本下,您可以利用以下功能过滤阵列:

db.users.aggregate([
//匹配数组中包含这些元素的“文档”
{“$match”:{
“伤害_id”:{
“$in”:[
ObjectId(“538D9E7ED173E520A000065”),
ObjectId(“538F21868A5FC5E01F0000065”)
]
}
}},
//要筛选的带有$map的项目
{“$project”:{
“伤害”:{
“$setDifference”:[
{“$map”:{
“输入”:“$injury”,
“as”:“el”,
“在”:{
“$cond”:[
{
“$or”:[
{“$eq”:[
“$$el.\U id”
目标(“538D9E7ED173E520A000065”)
]},
{“$eq”:[
“$$el.\U id”
ObjectId(“538F21868A5FC5E01F0000065”)
]}
]
},
“$$el”,
假的
]
}
}}, 
[错误]
]
}
}}
])

是。它是一个数组,不过滤数组。你也有类似的问题,你以前问过,并得到了关于如何做到这一点的答案,但你没有清楚地展示你在其中任何一个问题上的数据,你再次通过提供屏幕截图而不是实际数据来做同样的事。我建议你回到你以前的问题,澄清你的数据,这样你就可以真正了解如何做到这一点。@MaTya我相信是的。“接受”对你有帮助的答案通常是好的。帮助人们了解解决方案的有效性,并帮助帮助您的人。别忘了你留下的其他问题。