Mongoose |根据每个文档中的字段更新所有文档

vxbzzdmp  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(165)

我有一个集合,我想根据字段email更新它的所有文档,并将其转换为小写。

const addressBookSchema = new Schema({
    email: String,
});
const addressBook = mongoose.model("address_book", addressBookSchema)

我试着做以下事情:

addressBook.update({}, {$set: {email: email.toLowerCase()}}, {multi: true});

但这行不通。
如何获取电子邮件字段并将其设置为小写?

snvhrwxg

snvhrwxg1#

通过下面的方法,您可以使用小写集合函数更新多个文档。

db.addressBook.updateMany(
    {},
    [{$set : {email :{ $toLower: "$email" } }}],
)
xfyts7mz

xfyts7mz2#

对所有文档执行此操作,

addressBook.find({}, {email: 1})
    .exec((err, docs) => {
        if (err || docs == undefined || docs.length == 0)
            ;
        else {
            docs.forEach((doc) => {
                 addressBook.findOneAndUpdate({_id: doc._id}, 
                                              {$set: {email: doc.email.lowercase()}})
                 .exec();
            });
       }
    });
ffdz8vbo

ffdz8vbo3#

如果数据集如此之大,则应使用bulkWrite()函数

addressBook.bulkWrite([
  {
    updateMany: {
      filter: {},
      update: { email: email.lowercase()}
    }
  },
]).then(handleResult);

相关问题