Elasticsearch和随后的Mongodb查询

时间:2016-07-15 06:51:40

标签: mongodb search mongodb-aggregation

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

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

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

(注意 - 由于用户的最新评论经常变化,我不想将其存储在Elasticsearch中,因为这会过于频繁地触发整个文档的retrieve-change-reindex过程)

2 个答案:

答案 0 :(得分:3)

此答案假设您的mongo数据库存储在comments db。

{
  "_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)

答案 1 :(得分:0)

你可以试试这个..

db.foo.find()排序({_ ID:1})。。极限(100);

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