我正在使用Elasticsearch实现搜索功能。
我收到Elasticsearch返回的“用户名”设置,之后我需要在MongoDB中查询一个集合,以获取“用户名”集中每个用户的最新评论。
问题:假设我每次查询Elasticsearch时都会收到~100个用户名,这是查询MongoDB获取每个用户最新评论的最快方法。是使用.findOne()在for循环中查询MongoDB 100次的唯一选择吗?
(注意 - 由于用户的最新评论经常变化,我不想将其存储在Elasticsearch中,因为这会过于频繁地触发整个文档的retrieve-change-reindex过程)
答案 0 :(得分:3)
此答案假设您的mongo数据库存储在comments
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)
答案 1 :(得分:0)
你可以试试这个..
db.foo.find()排序({_ ID:1})。。极限(100);
1将按升序排序(从旧到新),-1将按降序排序(从新到旧。)