Arrays 将字符串前缀添加到MongoDb中数组中对象的字段
我有很多这样的mongoDb文档Arrays 将字符串前缀添加到MongoDb中数组中对象的字段,arrays,mongodb,Arrays,Mongodb,我有很多这样的mongoDb文档 { store:"Jacks Pizza", storeNumbers:[ { "chef":"Giovanni", "number":"7203305544" } ] }, store:"Felicias Kitchen", storeNumbers:[ { "chef":"G
{
store:"Jacks Pizza",
storeNumbers:[
{
"chef":"Giovanni",
"number":"7203305544"
}
]
},
store:"Felicias Kitchen",
storeNumbers:[
{
"chef":"Gina",
"number":"+19161214594"
}
]
我想在所有没有+1国家代码的数字后面加一个“+1”前缀
这是我试过的-
db.users.updateMany({
"storeNumbers.number" : {
$exists: true,
$ne:"",
$regex: /^(?!\+)^(?![a-zA-Z])/
}
},
[ {
$set : {
"storeNumbers.$.number" : {
"$concat": [ "+1" , "$storeNumbers.$.number"]
}
}
}
]
);
这给了我一个错误,说明我无法对数组中的元素执行concat
您将如何做到这一点?没有直接的方法可以做到这一点,您可以使用从MongoDB 4.2开始
- 如果正则表达式与数字开头的“+1”字符串不匹配,则进行匹配查询
迭代$map
storeNumbers
如果$cond
与数字开头的“+1”字符串不匹配且数字字段不是字符串和字符串类型,则使用数字
检查条件,否则不执行任何操作$concat
将当前对象与新更新合并$mergeObjects
字段编号
回答得很好,尝试阅读了很多有关阵列上运算符的内容,但没有找到解决方案。
db.users.updateMany({
"storeNumbers.number": {
$exists: true,
$ne: "",
$not: {
$regex: "^\\+1"
}
}
},
[
{
$set: {
storeNumbers: {
$map: {
input: "$storeNumbers",
in: {
$mergeObjects: [
"$$this",
{
$cond: [
{
$and: [
{
$not: {
$regexMatch: {
input: "$$this.number",
regex: "^\\+1"
}
}
},
{
$ne: ["$$this.number", ""]
},
{
$eq: [{ $type: "$$this.number" }, "string"]
}
]
},
{
number: {
$concat: ["+1", "$$this.number"]
}
},
{}
]
}
]
}
}
}
}
}
])