我需要更新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”。
答案 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}})
这可以解决您的问题吗?