mongodb $ elemMatch $ in

Dig*_*its 16 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
}
]
}
Run Code Online (Sandbox Code Playgroud)

我有很多像这样的文档,我想找到一个文档在一个数组条目中包含defindex 313和_particleEffect 19的数组的位置,这意味着我必须使用$ elemMatch.

我还希望能够一次搜索许多不同的数组组合,例如,一个defindex为363,_particleEffect为19或6的数组,这意味着我必须使用$ in.

但是当我尝试将$ elemMatch和$ in放入查询中时,elemMatch将与它无关,因为它无法在数组上运行.我无法做到.

到目前为止我的尝试:

{unusual:{$all:[{"defindex":{"$in":[361,378]}},{"_particleEffect":{"$in":[30,0]}}]}}
Run Code Online (Sandbox Code Playgroud)

(我的最新尝试,根本不起作用.)

{"$and":[{"unusual.defindex":{"$in":[361,378]}},{"unusual._particleEffect":{"$in":[[30,36]]}}]}
Run Code Online (Sandbox Code Playgroud)

还有更多我尝试使用$ elemmatch和$和组合的组合.

(在异常数组中查找项目但忽略数组定界IE它将返回一个文档,其中将使用多个项目来满足条件(因此至少有一个项目具有匹配的defindex和一个具有该效果的项目.))

我已经花了一天半的时间来到这里并且已经到了很远的地方,甚至找到了一个与我几乎相同的问题,但却没有提到任何一部分的问题.- > MongoDB:匹配多个数组元素

tl; dr:有没有办法有效地做$ in $ elemMatch?

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

Asy*_*sky 27

您可以使用与您尝试的语法不同的语法来实现相同的结果,但不会遇到SERVER-3544中的限制.

使用以下语法:

db.collection.find({ "unusual": {"$elemMatch":{"defindex":363,"_particleEffect":{"$in":[6,19]}  }} })
Run Code Online (Sandbox Code Playgroud)

这将匹配任何具有313和6或19的数组元素的文档.

它也适用{$in:[]}于defindex和_particleEffect,只要您打算匹配两个列表的任意组合.

db.collection.find({ "unusual": {"$elemMatch":{"defindex":{"$in":[313,363]},"_particleEffect":{"$in":[6,19]}  }} })
Run Code Online (Sandbox Code Playgroud)