Elasticsearch 和后续 Mongodb 查询
Elasticsearch and subsequent Mongodb queries
我正在使用 Elasticsearch 实现搜索功能。
我收到 Elasticsearch 返回的 "username" 集,之后我需要查询 MongoDB 中的集合以获取 "username" 集中每个用户的最新评论。
问题:假设我每次查询 Elasticsearch 时都会收到大约 100 个用户名,什么是查询 MongoDB 以获取每个用户的最新评论的最快方式。使用 .findOne() 在 for 循环中查询 MongoDB 100 次是唯一的选择吗?
(注意 - 因为用户的最新评论经常更改,所以我不想将其存储在 Elasticsearch 中,因为这会过于频繁地触发整个文档的检索-更改-重建索引过程)
你可以试试这个..
db.foo.find().sort({_id:1}).limit(100);
1 将升序排序(从旧到新),-1 将降序排序(新到旧)。
此答案假定您的 mongo 数据库存储在 comments
数据库中的架构如下。
{
"_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)
我正在使用 Elasticsearch 实现搜索功能。
我收到 Elasticsearch 返回的 "username" 集,之后我需要查询 MongoDB 中的集合以获取 "username" 集中每个用户的最新评论。
问题:假设我每次查询 Elasticsearch 时都会收到大约 100 个用户名,什么是查询 MongoDB 以获取每个用户的最新评论的最快方式。使用 .findOne() 在 for 循环中查询 MongoDB 100 次是唯一的选择吗?
(注意 - 因为用户的最新评论经常更改,所以我不想将其存储在 Elasticsearch 中,因为这会过于频繁地触发整个文档的检索-更改-重建索引过程)
你可以试试这个..
db.foo.find().sort({_id:1}).limit(100);
1 将升序排序(从旧到新),-1 将降序排序(新到旧)。
此答案假定您的 mongo 数据库存储在 comments
数据库中的架构如下。
{
"_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)