我的用例的一个非常简化的版本是查找以作者姓名开头的所有帖子,如下所示:
> db.users.find();
{ "_id" : ObjectId("5c4185be19da7e815cb18f59"), "name" : "User1" }
{ "_id" : ObjectId("5c4185be19da7e815cb18f5a"), "name" : "User2" }
db.posts.insert([
{author : ObjectId("5c4185be19da7e815cb18f59"), text: "User1 is my name"},
{author : ObjectId("5c4185be19da7e815cb18f5a"), text: "My name is User2, but this post doesn't start with it"}
]);
所以我想识别所有以作者姓名开头的帖子。我正在尝试使用这样的聚合,但我不知道如何从聚合管道中提取用户名以在正则表达式匹配中使用:
db.users.aggregate([
{
$lookup: {
from: "posts",
localField: "_id",
foreignField: "author",
as: "post"
}
},
{
$match: { "post.text": { $regex: "^" + name}}
}
]).pretty();
这里的“名称”不是定义的东西,我需要从管道上一步的用户集合条目中提取名称。由于某种原因,我不明白该怎么做。
这可能非常简单,我在这里绝对感觉像块砖头一样厚……非常感谢任何帮助!