更新所有文档,添加具有不同值的新字段

问题描述 投票:0回答:2

我在express应用程序中使用uuid包,现在我需要将这些id添加到我的所有文档中。

Users.updateMany({},{$set:{newId:uuid()}},(err,success)=>{
      if(success) console.log(success);
});

我尝试了这种方法,成功返回不同的值,但在数据库中它以相同的值保存。我需要在我的文档中使用不同的 id 添加 newId 字段,仅此而已。感谢您的关注和帮助!!

mongodb express mongoose uuid
2个回答
2
投票

如果您熟悉 async/await 这应该可以工作

async function updateUuid() {
  try {
    const users = await Users.find({});
    for (const user of users) {
      const uuid = uuid();
      await User.findByIdAndUpdate(user._id, { $set: { newId: uuid } });
    }
  } catch (e) {
    console.error(e);
  }
}

0
投票

后来发现使用 forEach 和函数可以解决生成相同值的问题。下面在mongo工作区执行

function generateRandomString(length) {
    var result = '';
    var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@+_-=';
    var charactersLength = characters.length;
    for (var i = 0; i < length; ++i) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result
};

db.users2.find({}).forEach(function(doc) {
    const data = {
        ...doc,
        uuid: generateRandomString(30)
    }
    db.users.insert(data);
});
© www.soinside.com 2019 - 2024. All rights reserved.