MongoDB查询数组以获得精确的元素匹配,但可能不正常

时间:2011-05-28 23:59:25

标签: mongoid mongodb

我在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查询。

2 个答案:

答案 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]}

希望这会有所帮助 - 它很明显,它不在文档中