Elasticsearch 和后续 Mongodb 查询

Elasticsearch and subsequent Mongodb queries

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

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

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

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

你可以试试这个..

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

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

此答案假定您的 mongo 数据库存储在 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)