2011-05-29 45 views
2

我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中工作正常,但無法在您的node-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找不到任何行。它的工作在蒙戈CLI但

完整的源代碼在MongoDB的原生沒有的NodeJS工作: https://github.com/saturngod/tatoo/blob/master/data-provider.js

回答

1

固定的,問題是taskid的不是數量。

task_collection.update({user:username,'todo.id':Math.floor(taskId)}, {"$set":{"todo.$.done":1}},{safe:true},function(error, result){ 
0

那是因爲你已經獲得了一些錯別字。查看評論:

// 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) 
}); 
+0

我修復了它並更新了我的問題,但沒有運氣。 – saturngod 2011-05-30 00:35:06