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