Обновление массива с $ не работает в mongodb-native nodejs - PullRequest
2 голосов
/ 29 мая 2011

Мой mongodb похож на

{ "_id" : ObjectId("4de20ef97065cc77c80541fd"),
"todo" : [
{
"id" : 1,
"desc" : "hi",
"done" : 0
},
{
"id" : 2,
"desc" : "hello",
"done" : 0
}
], "user" : "saturngod" }

Итак, я обновляю данные следующим образом.

db.tasks.update({user:'saturngod','todo.id':2},{"$set":{"todo.$.done":1}});

все работает нормально в mongodb cli, но не может работать на вашем узлеРодной драйвер mongodb.

Я написал такой код

task_collection.update({user:username,'todo.id':taskId}, {"$set":{"todo.$.done":1}},{safe:true},function(error, result){
            sys.puts("callback user:"+username+"id:"+taskId+"error:"+error);
            if( error ) callback(error,result);
            else callback(null,result)

       });

Ошибка, возвращаемое нулевое значение, и обратный вызов также работает.Однако данные не были обновлены в базе данных.

Обновлено: я обнаружил «todo.id»: taskId не может найти ни одной строки.Он работает в Mongo Cli, но не работает в ноде mongodb

с полным исходным кодом: https://github.com/saturngod/tatoo/blob/master/data-provider.js

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Исправлено, проблема в том, что идентификатор задачи не является номером.

task_collection.update({user:username,'todo.id':Math.floor(taskId)}, {"$set":{"todo.$.done":1}},{safe:true},function(error, result){
0 голосов
/ 29 мая 2011

Это потому, что у вас есть некоторые опечатки.Смотрите комментарии:

// Should be username, not user, based on the query that worked
task_collection.update({user:user,'todo.id':taskId}, {"$set":{"todo.$.done":1}},{safe:true},function(err, result){
    sys.puts("callback user:"+user+"id:"+taskId+"error:"+error);
    // error is null because your callback argument name is err, not error
    if( error ) callback(error,result);
    else callback(null,result)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...