首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs mongoose批量更新

nodejs mongoose批量更新
EN

Stack Overflow用户
提问于 2015-01-29 23:32:14
回答 3查看 28.1K关注 0票数 8

我有一个文档集合,我需要为每个文档添加一个新字段。如果我运行一个查询来获取所有文档,然后更新每个文档,则node.js会停止,这可能是因为内存泄漏

这是我的代码

代码语言:javascript
运行
复制
var express = require('express');

var geocoderProvider = 'google';
var httpAdapter = 'http';

var People = require("./models/people").collection.initializeOrderedBulkOp();

var app = express();

var geocoder = require('node-geocoder').getGeocoder(geocoderProvider, httpAdapter, {});

app.get('/', function (req, res) {
  People.find({}, function (err, docs) {
    if (err) {
      res.send(err);
    }else{
      docs.forEach( function (doc){
        geocoder.geocode({address: doc.address, country: 'Italy', zipcode: doc.cap}, function(error, value) {
          doc.loc.coordinates[0]=value[0].latitude;
          doc.loc.coordinates[1]=value[0].longitude;
          People.update({ _id: doc._id }, { $set: { loc: doc.loc }}, { multi: true }, function (error){
            if(error){
              console.error('ERROR!');
            }
          });
        });
      });
    }
  });
});

var server = app.listen(3000, function () {
  var host = server.address().address
  var port = server.address().port
  console.log('Example app listening at http://%s:%s', host, port)
});

有没有办法批量更新mongoose?提前感谢

EN

回答 3

Stack Overflow用户

发布于 2015-04-23 03:40:34

有关查询和更新查询的更多详细信息。

代码语言:javascript
运行
复制
var bulk = People.collection.initializeOrderedBulkOp();
    bulk.find(query).update(update);
    bulk.execute(function (error) {
       callback();                   
    });

查询正在使用数组进行搜索。

更新需要$set

代码语言:javascript
运行
复制
var bulk = People.collection.initializeOrderedBulkOp();
    bulk.find({'_id': {$in: []}}).update({$set: {status: 'active'}});
    bulk.execute(function (error) {
         callback();                   
    });

查询是一种搜索id

代码语言:javascript
运行
复制
var bulk = People.collection.initializeOrderedBulkOp();
    bulk.find({'_id': id}).update({$set: {status: 'inactive'}});
    bulk.execute(function (error) {
         callback();                   
    });
票数 23
EN

Stack Overflow用户

发布于 2015-01-30 11:08:52

您可以下拉到集合级别并进行批量更新。此操作不是原子的-一些写入可能会失败,另一些可能会成功-但它将允许您在数据库的单个往返过程中进行这些写入。

它看起来像这样:

代码语言:javascript
运行
复制
var bulk = People.collection.initializeUnorderedBulkOp();
bulk.find({}).update({});
bulk.find({}).update({});
...
bulk.execute(function(err) {
    ...
});

在这里查看文档:

http://docs.mongodb.org/manual/core/bulk-write-operations/

票数 11
EN

Stack Overflow用户

发布于 2020-04-04 02:56:19

此示例应包括我们可以直接与Mongoose混合使用的所有情况

bulkWrite()

功能:

代码语言:javascript
运行
复制
Character.bulkWrite([
  {
    insertOne: {
      document: {
        name: 'Eddard Stark',
        title: 'Warden of the North'
      }
    }
  },
  {
    updateOne: {
      filter: { name: 'Eddard Stark' },
      // If you were using the MongoDB driver directly, you'd need to do
      // `update: { $set: { title: ... } }` but mongoose adds $set for
      // you.
      update: { title: 'Hand of the King' }
    }
  },
  {
    deleteOne: {
      {
        filter: { name: 'Eddard Stark' }
      }
    }
  }
]).then(res => {
 // Prints "1 1 1"
 console.log(res.insertedCount, res.modifiedCount, res.deletedCount);
});

官方文档:

https://mongoosejs.com/docs/api.html#model

_

Model.bulkWrite

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28218460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档