【问题标题】:Elasticsearch and subsequent Mongodb queriesElasticsearch 和后续的 Mongodb 查询
【发布时间】:2016-07-15 06:51:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mongodb search mongodb-aggregation


    【解决方案1】:

    此答案假定存储在 comments db 中的 mongo 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)
    

    【讨论】:

      【解决方案2】:

      你可以试试这个..

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

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

      【讨论】:

      • 上述查询不包括从 Elasticsearch 结果中收到的任何形式的用户名!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2019-01-28
      • 2015-04-09
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多