mongodb - 在 mongoDB 中使用同意搜索文本
问题描述
我正在尝试在聚合的 mongo 查询中搜索文本,但无法做到。我已经应用了很多解决方案,但没有任何效果。这是我的代码...我有两个名为“帖子”和“用户”的集合。我在帖子集合上应用聚合。例如
(posts collection)
posts = [{
"_id": ObjectId("601223fecb7cff30f5e198f9"),
"user_id": ObjectId("5feb09d01292aa121551adaf")
},
{
"_id": ObjectId("601229e8204fdd422f8b38d1"),
"user_id": ObjectId("5feb0a181292aa121551adb1")
},
{
"_id": ObjectId("6013a0551755a1730c6a424d"),
"user_id": ObjectId("5feb09d01292aa121551adaf")
}]
(users collection) users = [{
"_id": ObjectId("5feb09d01292aa121551adaf"),
"name": "john doe"
},
{
"_id": ObjectId("5feb0a181292aa121551adb1"),
"name": "Sim tim"
},
{
"_id": ObjectId("5feb09d01292aa121551adaf"),
"name": "john sina"
}]
我的聚合查询如下
db.posts.aggregate([
{ $match: {"users_data.name": { $regex: "john", $options: 'i' }}},
{ $sort: { "createdAt": -1 } },
{ $limit: 10 },
{
$lookup: {
from: 'users',
let: { userId: "$user_id" },
pipeline: [{
$match: {
$expr: { $eq: ["$_id", "$$userId"] },
}
},
],
as: 'users_data',
}
},
{
$unwind: {
path: "$users_data",
preserveNullAndEmptyArrays: true // optional
}
},
{
$project: {
"users_data":"$users_data",
"_id": 1
}
},
]);
这个查询给了我一个空白数组。但是当我在 $match 过滤器中传递一个空白对象 {} 时,它会给我所有记录,当我使用像 john 这样的用户名进行搜索时,它会给我一个空白数组。
谁能帮我解决这个问题,我如何使用聚合查询直接从用户集合中搜索字符串?
提前致谢