Node.js MongoDb$addFields和$match

Node.js MongoDb$addFields和$match,node.js,mongodb,aggregation,Node.js,Mongodb,Aggregation,在我的mongodb查询中,我使用$addFields添加ID字段,该字段由其他三个字段串联而成。我的问题是,如果我将新添加的字段与我要查询的值进行$匹配,则不会得到任何结果。对于其他领域来说,它们工作得很好 下次请添加您的文档样本,以便人们可以重现您的问题。话虽如此,我看不出你的问题在哪里。我创建了一些数据来重现您的用例。因此,我添加了以下文档: { "_id" : ObjectId("5a0d5d376c9b762a7c035ec4"), "projectName"

在我的mongodb查询中,我使用$addFields添加ID字段,该字段由其他三个字段串联而成。我的问题是,如果我将新添加的字段与我要查询的值进行$匹配,则不会得到任何结果。对于其他领域来说,它们工作得很好


下次请添加您的文档样本,以便人们可以重现您的问题。话虽如此,我看不出你的问题在哪里。我创建了一些数据来重现您的用例。因此,我添加了以下文档:

{ 
    "_id" : ObjectId("5a0d5d376c9b762a7c035ec4"), 
    "projectName" : "some stack test", 
    "price" : NumberInt(45), 
    "propertyId" : {
        "prefix" : "a", 
        "number" : "7"
    }
}
然后我执行了您的脚本(没有排序),它运行良好:

db.yourCollectionName.aggregate([
    {
        $project: {
            "projectName": 1,
            "price": 1,
            "document": '$$ROOT'
        }
    },
    {
        $addFields: {
            "document.id": {
                $concat: ['$document.propertyId.prefix', '$document.propertyId.number']
            }
        }
    },
    {
        $match: {
            $and: [{
                $or: [{
                        "projectName": {
                            $regex: '.*' + "some stack test"
                        }
                    },

                    {
                        "document.id": {
                            $regex: '.*' + "a" + '.*',
                            $options: "7"
                        }
                    }
                ]
            }]

        }
    },
    {
        $replaceRoot: {
            newRoot: "$document"
        }
    }
])
您没有得到结果的事实可能是由于您的请求参数。此外,
“projectName”
如何与您的
“document.id”
具有相同的搜索参数,它们是否匹配? 再次检查您的匹配管道:

{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},       
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}

你的数据和查询是什么样子的?@Astro,我把它们放在我的参数中。你可以在附件中查找它们pictures@Astro,对于$project,我使用$$ROOT获取所有字段,然后通过连接3个字段添加id字段。在这之后,我想查询新添加的字段的值。你能粘贴你如何添加字段的代码,以及你如何尝试在你的匹配中访问此字段的代码吗?我们无法从这些截图中真正分辨出来。@AlexP。我已经附上了代码是的,你是对的。不知怎么的,我的参数中有一个不可见的空格,尽管我没有这样传递它们。它们有相同的搜索参数,因为我想搜索某个文本,无论它是否存在于任何字段中。谢谢
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},       
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}