我正在查询查找精确的数组匹配并成功检索它,但是当我尝试查找具有不同顺序的值的精确数组时,它会失败。
Example
db.coll.insert({"user":"harsh","hobbies":["1","2","3"]})
db.coll.insert({"user":"kaushik","hobbies":["1","2"]})
db.coll.find({"hobbies":["1","2"]})
第二份文件已成功检索
db.coll.find({"hobbies":["2","1"]})
没有显示任何内容
请帮忙
The 目前接受的答案 https://stackoverflow.com/a/29774404/1680196不确保数组完全匹配,只是大小相同并且数组与查询数组共享至少一项。
例如,查询
db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] } });
在这种情况下仍然会返回用户 kaushik。
要实现精确匹配,您需要做的是将$size http://docs.mongodb.org/manual/reference/operator/query/size/ with $all http://docs.mongodb.org/manual/reference/operator/query/all/,像这样:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] } });
但请注意,这可能是一项非常昂贵的操作,具体取决于数据的数量和结构。
由于 MongoDB 保持插入数组的顺序稳定,因此在插入到数据库时确保数组按排序顺序可能会更好,这样您在查询时就可以依赖静态顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)