2014-02-24 110 views
1

我需要在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); 
         }); 
        }); 

请帮忙。

+0

你能解释“不行”好一点吗?怎么了?你能指望什么。显示你想要更新的文件(只有几个)以及你期望的结果。编辑你的问题,不要把它放在评论中。 –

回答

1

似乎有两个可能的问题。

1)您的ids数组不是ids的数组,它是一个具有单个元素的数组,它本身就是一个数组,它有两个元素。一个ID数组将会是'['idvalue1','idvalue2']

2)你的数组里面的id值是字符串 - 是你如何存储你的“_id”值?如果它们是ObjectId()类型,那么它们不是一个字符串,而是一个ObjectId(“stringhere”)类型,它不是相同的类型,并且不等于“stringhere”。

+0

或者可能还没有办法知道,因为没有数据,可能需要使用$ set,可能是sails中的错误调用,可能写入客户端....我宁愿**知道**而不是推测。这个问题需要更多信息。耐心一点。 –

+0

感谢您的建议,尼尔。我认为这个问题可以看到id不是id数组。一旦查询谓词相匹配,那么更新操作可能不会是OP所期望的 - *该部分确实需要更多的数据,这就是为什么我没有推测它的原因。 –

+0

雅,正如你所说的数组内的id值是字符串,...我如何将它转换为objectids并将其传递给查询 – Mahahari

1

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

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

水线自动完成的“在”查询时,您有一个标准的属性设置为一个数组,帆 - 蒙戈自动翻译“ID”到“_id”和处理的ObjectId翻译为您服务。

1

这些字符串看起来像mongod ObjectIds的字符串表示形式,因此在查询之前可能想要将它们转换为ObjectIds。假设你已经与数组中嵌套了额外级别纠正你的问题,那就是:

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

然后你想要做这样的事情:

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

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

这是否解决问题了吗?