gpt4 book ai didi

node.js - MongoDb $addFields 和 $match

转载 作者:可可西里 更新时间:2023-11-01 10:40:08 26 4
gpt4 key购买 nike

在我的 mongodb 查询中,我使用 $addFields 添加 ID 字段,该字段连接了其他三个字段。我的问题是,如果我将新添加的字段与我要查询的值匹配,我将得不到任何结果。对于其他领域,它们工作得很好。

order of aggregation

what is in aggregation

data = await model.aggregate([
{
$project: {
projectName: 1,
price: 1,
'document': '$$ROOT'
}
},
{
$addFields:{
'document.id': {$concat: ['$document.propertyId.prefix','$document.propertyId.number']}
}
},
{
$match: {
$and: [
{
$or: [
{id: {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{projectName: {$regex: '.*' + req.query.search + '.*', $options: "i"}},

/*This also doesnt work*/
// {'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}},
// {'document.projectName': {$regex: '.*' + req.query.search + '.*', $options: "i"}},
]
}
]
}
},
{
$replaceRoot: {newRoot: "$document"}
},
{
$sort: {
[sortBy]: sortType
}
},
]);

最佳答案

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

{ 
"_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"}}

关于node.js - MongoDb $addFields 和 $match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47309861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com