【发布时间】:2015-01-07 17:10:36
【问题描述】:
我有一个项目数组,我会在我的 mongo db 中找到其中的第一个匹配项。
数组是这样的,但可能很长:["item:9802", "item:15051", "item:10028", "item:6575", "item:2355"] 我需要的是前三个命中,可以在 mongo db 中找到。并非所有 ID 都会存在。
我使用 github.com/mongodb/mongo-ruby-driver。 我做的是这个
search_hash = {:id=>{"$in"=>["item:9802", "item:15051", "item:10028", "item:6575", "item:2355"]}}
found = coll.find(search_hash).to_a
但是当我使用完全不同的顺序时,我发现这会返回完全相同的结果(并且顺序相同),例如:
search_hash = {:id=>{"$in"=>["item:2355", "item:6575", "item:9802", "item:15051", "item:10028"]}}
无论如何,无需遍历数组(很长)并在每个循环上执行查找即可获得第一个匹配项? 我对 Mongo 很陌生,所以也许这是一个非常简单的问题,但我希望任何人都可以帮助我。
【问题讨论】:
-
你应该使用
coll.find(search_hash).limit(3)。 -
感谢您的回答,但问题是排序不正确。在这两种情况下,它都会按顺序返回 ["item:10028", "item:15051", "item:9802"],而我只想要数组中的第一个命中。例如,limit(1) 应该在第一种情况下给出 ["item:9802"],在第二种情况下给出 ["item:2355"]。
-
您的订购输出应该是什么?
-
我想要按数组的顺序点击。最好不要循环数组,因为它会变得很大,我只需要第一个或前 3 个。
-
刚刚标记了您的基本副本。这就是您保留在
$in子句中提供的顺序的方式。将其与聚合中的$limit结合起来,作为前面提到的一部分,您就有了完整的答案。
标签: ruby arrays mongodb mongodb-query