Har*_*ara 12 arrays mongodb mongodb-query
我正在查询找到精确的数组匹配并成功检索它,但是当我试图找出具有不同顺序的值的确切数组时,它就会失败.
Example
db.coll.insert({"user":"harsh","hobbies":["1","2","3"]})
db.coll.insert({"user":"kaushik","hobbies":["1","2"]})
db.coll.find({"hobbies":["1","2"]})
Run Code Online (Sandbox Code Playgroud)
第二个文件成功检索
db.coll.find({"hobbies":["2","1"]})
Run Code Online (Sandbox Code Playgroud)
什么也没显示
请帮忙
kas*_*ban 31
在目前接受的答案不能保证完全匹配您的阵列上,只是大小相同,并且该阵列股份至少一个与查询数组项.
例如,查询
db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] } });
Run Code Online (Sandbox Code Playgroud)
在这种情况下仍然会返回用户kaushik.
什么,你需要一个精确匹配做的是结合$size使用$all,就像这样:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] } });
Run Code Online (Sandbox Code Playgroud)
但要注意,这可能是一项非常昂贵的操作,具体取决于您的数据量和结构.由于MongoDB保持插入数组的顺序稳定,因此在插入数据库时确保数组处于排序顺序可能会更好,因此在查询时可能依赖静态顺序.
Vik*_*mar 11
为了匹配数组字段,Mongo提供的$eq操作符可以在数组上操作,也可以像值一样操作.
db.collection.find({ "hobbies": {$eq: [ "singing", "Music" ] }});
Run Code Online (Sandbox Code Playgroud)
还要$eq检查指定元素的顺序.
如果您使用以下查询:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] } });
Run Code Online (Sandbox Code Playgroud)
然后不会返回完全匹配.假设您查询:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "2" ] } });
Run Code Online (Sandbox Code Playgroud)
此查询将返回具有元素2且大小为2的所有文档(例如,它还将返回具有hobies的文档:[2,1]).
| 归档时间: |
|
| 查看次数: |
8014 次 |
| 最近记录: |