mongodb $ elemMatch $ in

时间:2013-11-12 04:25:00

标签: arrays mongodb

所以,我有一个数据库,里面有文档中的数组。 我想查找整个文档,其中我的查询与使用$ 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?

感谢阅读并能够阅读我格式错误的帖子,谢谢。

3 个答案:

答案 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}
        }]
    }
}