mongoose forEach循环并逐个更新文档

时间:2018-03-07 10:29:18

标签: javascript sql node.js mongodb mongoose

我想查询一个集合并使用一些值来更新每个文档,这些值将从另一个查询中获得,该查询将使用返回文档中的一些信息构建。

const mongoose = require('mongoose');
const userModel = {
      country: { type: String }
      newField: { type: String } 
     };
const myUsersModel = mongoose.model('user',userModel); 
myUsersModel.find({country:"USA"}).forEach(function (doc) {

    // another query here into a relation Database:
    let anotherQuery = 'SELECT * FROM myTable WHERE name=' + doc.name;
    mySQLConnection.query(
            anotherQuery,
            function selectCb(err, results, fields) {
                if (err) {
                    console.log("ERROR: " + err.message);
                    throw err;
                }
                console.log("Got "+results.length+" Rows:");
                let updatedInfo = results.SomeField;

                // update the mongoose doc:
                doc.newField = updatedInfo;
                myUsersModel.save(doc);

            });
        mySQLConnection.end(function(err) {
          console.log("connection ended.");
        });
        mongoose.connection.close();
    });

我收到以下错误:

TypeError:myUsersModel.find(...)。forEach不是函数

2 个答案:

答案 0 :(得分:2)

myUsersModel.find({country:"USA"})
   .then(users=>users.forEach //users might be null here btw

或者如果你想保留你的回调风格

myUsersModel.find({country:"USA"}, function(err, users) {
  if (err) throw err;
  users.forEach

答案 1 :(得分:0)

如果未提供回调,Model.find将返回Query的实例,而不是Array的实例。 因此,您不能使用forEach,因为Query不是数组。