mongo如何使其顺序执行?
发布于 7 年前 作者 mengLLLL 4188 次浏览 来自 问答

我有个需求是这样的, 先更新数组的某个字段的值–>然后再去更新该数组(插入) 我现在的理解是,这两个操作是异步的,那怎么保证先后顺序呢? 示例如下

user.find({},function(){
//更新操作,将其中一个字段设置一下
})
//之后
user.update({},{$push:{}},function(err,msg){)}
12 回复

更新一个字段的值可以直接用 $set ,例:更新用户admin的年龄为16 user.update({username:‘admin’},{$set:{age:16}},function(err){)} 还是说我理解错了你的需求 ? 至于这个异步先后顺序,直接粗暴的方法就是嵌套,用你的代码就是这样: user.find({},function(){ //更新操作,将其中一个字段设置一下 //之后 user.update({},{$push:{}},function(err,msg){)} }) 但是回调嵌套多了不好,可以了解下Promise。

回调嵌套,简单粗暴。

这是什么鬼,新人啊。异步流程控制都还不知道啊

@sanrudongfeng 不知道很奇怪吗?

可以使用朴灵写的eventproxy模块进行流程控制,原理就是搞个计数器来记录流程。

首先,你指的是js引入的mongoose驱动,mongoose现在是支持Promise的,Model.find().then((date) => { other function }).catch((err) => { }) // In mongoose 4, a Query has a .then() function, and thus can be used as a promise. 其次,update就是先按第一个参数find后然后再更新,第二的参数{$func: {key: newValue}}更新内容,第三个参数是更新选项{multi: true}多条更新(update返回数组,不过不设置,默认更新第一条) // CSScore.update({score: {$gt:  90}}, {$set: {score: ‘excellent’}}, {multi: true})

多看看文档里面的例子,看看别人的代码,会帮你更快的理解

mongodb文档 https://docs.mongodb.com/manual/ mongoose文档 http://mongoosejs.com/docs/

@wangtantan 感谢,我会去看的😊

回到顶部