【问题标题】:how to add number to field in every document in mongodb using nodejs如何使用nodejs在mongodb的每个文档中添加数字到字段
【发布时间】:2022-01-19 12:43:14
【问题描述】:

我的收藏有一个phonenumber 字段。我想在电话号码前加 91。

{
"_id": "6137392141bbb7723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":9000000001
},
{
"_id": "6137392141bbe30723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":9000000002
}

我想像这样更新我的收藏。

{
"_id": "6137392141bbb7723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":919000000001
},
{
"_id": "6137392141bbe30723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":919000000002
}

我正在尝试使用此代码,但它没有更新字段。

var x = await User.find({});
        x.forEach(async function(d)
            { 
                var phone = d.phonenumber;  
                var newPhoneNumber = 910000000000+phone;
                console.log(newPhoneNumber);

                //update 
            await User.updateMany({},{$set:{phonenumber:newPhoneNumber}},
                {
                    new: true, 
                    runValidators : true
                });
            })

对于所有这样的文档,我只得到一个值:

{
"_id": "6137392141bbb7723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":919000000001
},
{
"_id": "6137392141bbe30723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":919000000001
},
{
"_id": "6137392141bbe30723",
"email": "brooke@cagle.com",
"lastname": "Cagle",
"firstname": "Brooke",
"phonenumber":919000000001
}

我不知道这种做法是否正确。

【问题讨论】:

  • 您可以通过单击对勾来接受以下答案吗?

标签: javascript node.js mongodb mongoose


【解决方案1】:

我找到了解决办法。也许,这行得通,

let mobile = 9876543210;
let phone = `91${mobile}`;
let final = Number(phone)
console.log(typeof(final), final+3);

所以,

var phone = d.phonenumber;
var newPhoneNumber = Number(`91${phone}`);
console.log(newPhoneNumber);

了解有关 Number() 的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

Playground

db.collection.update({},
//To match all documents
[{
  $set: {
    key: {
      $toInt: {
        $concat: [
          "91",
          {
            $toString: "$key"
          }
        ]
      }
    }
  }
}
],
//Concatenate 91 and the value in the field
{multi: true
})

这适用于 4.2 的 mongo 版本。这是用于更新查询的聚合管道。

Reference

编辑:

您会遇到溢出错误。在这种情况下,您可以使用 toLong。

db.mybooks.update({},
//To match all documents
[{
  $set: {
    key: {
      $toLong: {
        $concat: [
          "91",
          {
            $toString: "$key"
          }
        ]
      }
    }
  }
}
],
//Concatenate 91 and the value in the field
{multi: true
})

这是一段经过测试的代码。

【讨论】:

  • $concat 仅适用于字符串而不适用于数字。谢谢!
  • @saikrishna 请检查编辑。
  • 以上代码也不行。谢谢!
  • @saikrishna 您使用的是什么 mongo 版本?不工作 - 从某种意义上说?
  • 请试用最新代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多