所以,我有一个数据库,里面有大量的数组.我想找到整个文档,其中我的查询与使用$ 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)
| 归档时间: |
|
| 查看次数: |
29074 次 |
| 最近记录: |