1

我正在使用 Elasticsearch 实现搜索功能。

我收到 Elasticsearch 返回的“用户名”集,之后我需要在 MongoDB 中查询一个集合以获取“用户名”集中每个用户的最新评论。

问题:假设我每次查询 Elasticsearch 时都会收到大约 100 个用户名,什么是查询 MongoDB 以获取每个用户的最新评论的最快方法。使用 .findOne() 在 for 循环中查询 MongoDB 100 次是唯一的选择吗?

(注意 - 因为用户的最新评论经常更改,我不想将其存储在 Elasticsearch 中,因为这会过于频繁地触发整个文档的检索-更改-重新索引过程)

4

2 回答 2

3

此答案假定存储在 db 中的 mongo db 具有以下架构comments

{
  "_id" : ObjectId("5788b71180036a1613ac0e34"),
  "username": "abc",
  "comment": "Best"
}

假设usernames是您从 elasticsearch 获得的用户列表,您可以执行以下操作aggregate

a =[
    {$match: {"username":{'$in':usernames}}},
    {$sort:{_id:-1}},
    {
       $group:
         {
           _id: "$username",
           latestcomment: { $first: "$comment" }
         }
     }
]
db.comments.aggregate(a)
于 2016-07-15T10:24:05.993 回答
0

你可以试试这个。。

db.foo.find().sort({_id:1}).limit(100);

1 将按升序排序(从旧到新),-1 将按降序排序(从新到旧)。

于 2016-07-15T07:15:19.333 回答