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