2017-09-01 195 views
-1

我需要更新数组字段,如果数组只剩下3个值在数组中。 例如,如果有文件 users = [ {name: 'aaaaaa', tags: ['a','b','c','d']}, {name: 'bbbbbb', tags: ['a2','b2','c2','d2', e2]}, ] 在结果,我想接收 users = [ {name: 'aaaaaa', tags: ['a','b','c']}, {name: 'bbbbbb', tags: ['a2','b2','c2']}, ] 或者,如果可以,我想要查询数组长度和更新阵列中的一个请求。我想推到数组值,如果数组超过3,只需删除第一个元素,并且所有操作都必须在一个请求中,因为JS是异步的,我不能使用js代码来完成此操作。Nodejs mongoose mongodb

回答

0

我想你有用户猫鼬模型。 因此,要按照自己的方式更新文档,必须更新每个文档。

Users.find({},(err, users)=>{ 
    users.forEach(user=>{ 
     if(user.tags.length > 3){ 
      user.tags.splice(0,1); //Removes first element from array 
      user.save(err=>{ if(err) console.log(err); }); //Saves modified document 
     } 
    }); 
}); 
+0

这是错误的方法。如果我的服务器同时收到两个请求,首先请求选择用户数据,然后请求选择用户数据,然后首先请求更改数据并保存它们,第二个请求更改数据,当它将要保存时,第二个请求将替换数据,被第一个请求更改 –

+0

您没有正确描述您的问题。你问了如何在一个请求中更新来自mongo的文档数组。上面的代码解决了这个问题。如果您希望在收到请求后更新数据库,则每次收到请求时都会更新收集。我只能建议你理清架构和实现 – Goolishka

相关问题