首页 > 解决方案 > 在 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 这样的用户名进行搜索时,它会给我一个空白数组。

谁能帮我解决这个问题,我如何使用聚合查询直接从用户集合中搜索字符串?

提前致谢

标签: mongodbmongoose

解决方案


推荐阅读