我在MongoDB中有一个文档如下:
{ users: ["2", "3", "4"] }
我尝试通过匹配users数组来查询此文档。
db.things.find( { users: { $all: [ "2", "3", "4" ] } } )
该查询有效,但也会返回此文档:
{ users: ["2", "3", "4", "5"] }
最后一个要求是能够使用不按顺序的元素查询users数组,比如查询中的[ "3", "4", "2" ]
,并且它能够返回我列出的第一个文档。
非常感谢任何帮助。提前谢谢。
我也在使用mongoid,如果它有一个任何人都知道的帮助器,但是如果我需要的话可以直接进行mongo查询。
答案 0 :(得分:10)
您可以将查询与{users:{$ size:3}}子句合并,并调整大小以匹配您要查询的用户数。这将确保您获得精确的集合,而不是子集。
如果元素出现故障,您可能需要为每个元素执行{users:{$ exists:“1”}},并将这些和$ size子句组合在一起。
答案 1 :(得分:-1)
This answer不正确。
查询文档以获得数组中的完全匹配。执行此操作。
db.things.insert({a:[1,2]});
db.things.insert({a:[1,2,3]});
db.things.find({a:[1,2]});
returns {a:[1,2]}
希望这会有所帮助 - 它很明显,它不在文档中