2011-04-25 24 views
3

我試圖使用$ inc操作符在我的mongodb文檔中增加一個字段。我試圖增加該領域是我的文檔數區域的子屬性,如:

mydoc: { 
    count: { 
     schedules: 0 
    } 
} 

當我試試這個:

> db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $inc: { count.schedules: 1 } }, { upsert: true, safe: true }, null); 

從我蒙戈貝殼,我得到這個錯誤信息:

Mon Apr 25 11:59:05 SyntaxError: missing : after property id (shell):1 

我已經嘗試了幾個語法變體,結果類似。我需要採取不同的方法嗎?我已經驗證了我的文檔存在並具有被設置爲0

我可以用這樣的命令直接設定值count.schedules場:

db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $set: { count: { schedules:1 } } }, null, null); 

但是,如果我嘗試語法在$ INC操作,我得到這個錯誤:

Modifier $inc allowed for numbers only 

感謝

回答

5

是的,你只能在數字做$inc。以下是我如何重現您的問題,您可以注意到我使用了正確的引號,這就是您看到missing : after property id(shell):1錯誤的原因。

> db.schedules.save({"mydoc": { "count": { "schedules": 0}}});                          
> db.schedules.find();           
{ "_id" : ObjectId("4db5cf199e631c2a52a7c643"), "mydoc" : { "count" : { "schedules" : 0 } } } 
> db.schedules.update({ _id: new ObjectId("4db5cf199e631c2a52a7c643") }, { $inc: { "mydoc.count.schedules": 1 } }, { upsert: true, safe: true }, null); 
> db.schedules.find();                                 
{ "_id" : ObjectId("4db5cf199e631c2a52a7c643"), "mydoc" : { "count" : { "schedules" : 1 } } } 

希望這會有所幫助!

+0

完美,謝謝!我需要養成引用這些習慣的習慣。 – dinjas 2011-04-25 19:50:36

3

我認爲這可能是一個簡單的修復。嘗試像這樣的報價如下:

db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $inc: { 'count.schedules': 1 } }, { upsert: true, safe: true }, null); 
+1

謝謝!自從他回答第一個問題之後,我給了龍蝦1234,但感謝您的幫助! – dinjas 2011-04-25 19:51:52

+0

沒問題。很高興你解決了問題。 – bowsersenior 2011-04-25 22:35:32

+0

我想在我的代碼下面更新數據庫中的字段值。我有一個'productview'字段,這個字段將管理用戶看到這個產品的時間有多長,但是它不工作。像自動增量。 – 2016-09-01 12:55:30