javascript - Mongoose QueryStream 和请求模块

标签 javascript node.js mongoose mongoose-schema node-request

在模型上执行 QueryStream 时,例如

User.find({}).stream().on('data', (user) => {
    request.post(someOptions, (error, response, body) => {
         if(!error && response.statusCode === 200) {
             user.someProperty = body.newValue;
             user.save((err) => {
                 if (err) console.log(err)
             });
         } else {
             console.log(error);
             console.log(response);
         }
}).on('end', () => {
    console.log('all users have new values');
});

我收到结束事件的控制台输出,然后收到错误:

all users have new values
TypeError: user.save is not a function
    at Request._callback

我假设这意味着 request.post 函数运行了太多次,因为我尝试在没有流的情况下执行此操作,而只是一个

.find({} (err, users) => {
     for(user in users) {
         request.post...
     } 
});

但这从我发布到的 api 返回了错误的状态代码,因为 request.post() 在我正在发送的选项中发送了一个 undefined 值传递我从用户文档中获得的值,即使所有文档都有定义的值。虽然,我没有收到保存不是函数的错误。

任何人都可以阐明正在发生的事情吗?

最佳答案

这是一个简化版本,假设您不需要 stream (应该换成 cursor )并且你有 request-promise-native可用

const users = await User.find().exec()
for(let user of users) {
    const body = await request.post(someOptions)
    if(body) {
        user.someProperty = body.newValue
        await user.save()
    }
}

从代码看来你正在做同样的post并更新每个 user 的相同值。如果是这样的话,为什么不呢:

const body = await request.post(someOptions)
if(body) {
    await User.update(
      { },
      { $set: { someProperty: body.newValue } },
      { multi: true }
    )
}

关于javascript - Mongoose QueryStream 和请求模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366048/

相关文章:

javascript - 异步等待问题

angularjs - 删除函数的 API 不再工作并且不会从数组中删除任何内容?

javascript - Mongoose - 子架构引用父子文档

javascript - Javascript 输入中的逗号分隔数字

node.js - 聚合 mongoose nodejs $match 不起作用

javascript - 纯 CSS 旋转器卡住

node.js - express 3.0 如何使用 app.locals.use 和 res.locals.use

node.js - Angular 2 服务器 Express ERR_CONNECTION_REFUSED

javascript - 为什么 WeakSet 不能和 Symbol 一起使用?

javascript - Vue模板中的调用服务方法