所以,我有一个数据库,里面有文档中的数组。 我想查找整个文档,其中我的查询与使用$ in的一个或多个数组元素完全匹配。
所以,文档结构:
{
"_id" : "76561198045636214",
"timecreated" : 1311148549,
"unusual" : [
{
"id" : 1960169991,
"original_id" : 698672623,
"defindex" : 313,
"_particleEffect" : 19
},
{
"id" : 965349033,
"original_id" : 931933064,
"defindex" : 363,
"_particleEffect" : 6
}
]
}
我有很多这样的文档,我想找到一个文档在一个数组条目中包含defindex 313和_particleEffect 19的数组的位置,这意味着我必须使用$ elemMatch。
我还希望能够一次搜索许多不同的数组组合,例如一个defindex为363且_particleEffect为19或6的数组,这意味着我必须使用$ in。
然而,当我尝试将$ elemMatch和$ in放入查询中时,elemMatch将与它无关,因为它无法在数组上运行。我无法做到。
到目前为止我的尝试:
{unusual:{$all:[{"defindex":{"$in":[361,378]}},{"_particleEffect":{"$in":[30,0]}}]}}
(我的最新尝试,根本不起作用。)
{"$and":[{"unusual.defindex":{"$in":[361,378]}},{"unusual._particleEffect":{"$in":[[30,36]]}}]}
还有更多我尝试使用$ elemmatch和$ and。
组合的组合(查找异常数组中的项但忽略数组定界IE,它将返回一个文档,其中将使用多个项来满足条件(因此至少有一个项目的defindex匹配,一个项目具有效果。) )
我花了一天半的时间来到这里并且已经走得很远,甚至找到了一个与我几乎相同的问题,但却没有提到任何一部分的问题。 - > MongoDB: Match multiple array elements
tl; dr:有没有办法有效地做$ in $ elemMatch?
感谢阅读并能够阅读我格式错误的帖子,谢谢。
答案 0 :(得分:21)
您可以使用与您尝试的语法不同的语法来获得相同的结果,但不会遇到SERVER-3544中的限制。
使用以下语法:
db.collection.find({ "unusual": {"$elemMatch":{"defindex":363,"_particleEffect":{"$in":[6,19]} }} })
这将匹配任何具有313和6或19的数组元素的文档。
对于defindex和_particleEffect,它也适用{$in:[]}
,只要您打算匹配两个列表的任意组合。
db.collection.find({ "unusual": {"$elemMatch":{"defindex":{"$in":[313,363]},"_particleEffect":{"$in":[6,19]} }} })
答案 1 :(得分:0)
https://jira.mongodb.org/browse/SERVER-3544
Welp,做了很多挖掘,看起来这回答了我的问题。 你现在不能在$ elemmatch中做$。
答案 2 :(得分:-1)
试试这个(经过测试)
{
"unusual": {
$all:[{
$elemMatch:{"defindex":313},
$elemMatch:{"_particleEffect":6}
}]
}
}