Elasticsearch 和后续的 Mongodb 查询
Posted
技术标签:
【中文标题】Elasticsearch 和后续的 Mongodb 查询【英文标题】:Elasticsearch and subsequent Mongodb queries 【发布时间】:2016-07-15 06:51:39 【问题描述】:我正在使用 Elasticsearch 实现搜索功能。
我收到 Elasticsearch 返回的“用户名”集,之后我需要在 MongoDB 中查询一个集合以获取“用户名”集中每个用户的最新评论。
问题:假设我每次查询 Elasticsearch 时都会收到大约 100 个用户名,查询 MongoDB 以获取每个用户的最新评论的最快方法是什么。使用 .findOne() 在 for 循环中查询 MongoDB 100 次是唯一的选择吗?
(注意 - 因为用户的最新评论经常更改,我不想将其存储在 Elasticsearch 中,因为这会过于频繁地触发整个文档的检索-更改-重新索引过程)
【问题讨论】:
【参考方案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 结果中收到的任何形式的用户名!以上是关于Elasticsearch 和后续的 Mongodb 查询的主要内容,如果未能解决你的问题,请参考以下文章