在Sails.js中更新多个MongoDB记录

时间:2014-02-24 08:34:04

标签: mongodb sails.js

我需要更新mongodb中的多条记录。

从前端逻辑,我得到了如下数组的id。

ids:[[' 530ac94c9ff87b5215a0d6e6',' 530ac89a7345edc214618b25' ]]

我有一个如上所示的ID数组,我需要更新该数组中所有记录的文件夹字段。

我尝试将ID传递给mongodb查询,如下所示,但仍然无效。

       Post.native(function(err, collection) {

           collection.update({
                        _id : {
                             "$in" : ids
                              }
                       }, { folder : 'X'}, {
                              multi : true
                       }, function(err, result) {
                        console.log(result);
                       });
                   });

请帮忙。

3 个答案:

答案 0 :(得分:1)

似乎有两个可能的问题。

1)你的ids数组不是ids数组,它是一个数组,它有一个单独的元素,它本身就是一个数组,有两个元素。一系列id将是`['idvalue1','idvalue2']

2)数组中的id值是字符串 - 是你存储“_id”值的方式吗?如果它们是ObjectId()类型,则它们不是字符串,而是类型ObjectId(“stringhere”),它不是同一类型,并且不等于“stringhere”。

答案 1 :(得分:1)

在这种情况下,没有理由使用native方法。只是做:

Post.update({id : ids}, {folder : 'X'}).exec(console.log);

当您将条件属性设置为数组时,Waterline会自动执行“in”查询,并且Sails-Mongo会自动将“id”转换为“_id”并为您处理ObjectId转换。

答案 2 :(得分:1)

这些字符串看起来像是mongod ObjectIds的字符串表示,所以你想要做的就是在查询之前把它们变成ObjectIds。假设你已经通过数组中额外的嵌套级别纠正了你的问题,那就是:

ids = ['530ac94c9ff87b5215a0d6e6', '530ac89a7345edc214618b25']

然后你想做这样的事情:

oids = []
for (var i in ids)
    oids.push(ObjectId(ids[i]))

db.c.find({_id: {$in: oids}})

这可以解决您的问题吗?