Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch和后续Mongodb查询_Mongodb_Search_Mongodb Aggregation - Fatal编程技术网

Elasticsearch和后续Mongodb查询

Elasticsearch和后续Mongodb查询,mongodb,search,mongodb-aggregation,Mongodb,Search,Mongodb Aggregation,我正在使用Elasticsearch实现搜索功能 我收到Elasticsearch返回的“用户名”集,之后我需要在MongoDB中查询“用户名”集中每个用户的最新评论 问题:假设我每次查询Elasticsearch都会收到约100个用户名,那么查询MongoDB以获取每个用户的最新评论的最快方式是什么。使用.findOne()在for循环中查询MongoDB 100次是唯一的选项吗 (注意-由于用户的最新评论经常更改,我不想将其存储在Elasticsearch中,因为这将触发整个文档的检索更改重

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

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

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

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

您可以尝试此操作

db.foo.find().sort({u id:1}).limit(100)


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

此答案假设存储在
注释中的mongo db采用以下模式

{
  "_id" : ObjectId("5788b71180036a1613ac0e34"),
  "username": "abc",
  "comment": "Best"
}
假设
用户名
是您从elasticsearch获得的用户列表,您可以执行以下
聚合

a =[
    {$match: {"username":{'$in':usernames}}},
    {$sort:{_id:-1}},
    {
       $group:
         {
           _id: "$username",
           latestcomment: { $first: "$comment" }
         }
     }
]
db.comments.aggregate(a)

以上查询不包括任何形式的Elasticsearch结果中的用户名!