2016-07-21 25 views
4

我想製作一個服務器js文件已經啓動多少次的計數器,用於我的網站使用角度js的mongodb驅動程序。節點js中的增量計數器mongodb

我想保存一個值爲0的變量命名計數器,然後每次運行服務器時增加該值。我的代碼在下面。正如你可以看到我的代碼不會在數據庫中更新字段。只是變數。

旁邊的那個......好吧..我寫的整個代碼看起來很糟糕。我基本上有一個{id:<>,count:0}的文檔,我正在遍歷所有大於-1的計數字段(即整數),儘管我只有1個計數字段。

是否有任何簡單的方法來堅持/從數據庫中獲得這個1值?

如何以最簡單的方式更新數據庫本身內部的字段?

感謝

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    if (err) { 
     console.log(err); 
    } 
    else { 
     console.log("Connected correctly to DB."); 
     var dbusers =db.collection('users'); 
     var cursor =dbusers.find({ "count": { $gt: -1 } }); 
     cursor.each(function(err, doc) { 
      assert.equal(err, null); 
      if (doc != null) { 
       doc.count=doc.count+1; 
      } 
     } 
     ); 
    } 
    db.close(); 
}); 
+0

這是'doc.count + 1;'是否想做任何事情? –

+0

已將其更新爲doc.count = doc.count + 1; – Matoy

+0

它假設將db(count)中的值增加1 – Matoy

回答

2

試試這個:

MongoClient.connect(url, function(err, db) { 
    if (err) { 
     console.log(err); 
     return db.close(); 
    } 

    console.log("Connected correctly to DB."); 
    // update a record in the collection 
    db.users.update(
     // find record with name "MyServer" 
     { name: "MyServer" }, 
     // increment it's property called "ran" by 1 
     { $inc: { ran: 1 } } 
    ); 
    return db.close(); 
}); 

這應該足以讓你開始。這聽起來像你試圖做這樣的事情:

  1. 讓我有一個屬性集合中的所有對象「計數」大於-1

  2. 增加它的值由1

  3. 將其保存到集合中。

您錯過的步驟是第3步。按照您的方式做,您必須執行批量更新。我給你的例子是更新單個記錄。

here是增量的文檔。而here是批量更新的文檔。

+1

這是什麼語法?當我嘗試你的代碼時,我得到了undefined:db.users.update(...)。 我做了db.collection('users')。updateOne({「name」:「id」}, \t \t {$ inc:{count:1}}); 解決了它。我給你+1和$ inc – Matoy

+0

你可以用點符號來引用一個集合。即db.users相當於db.collections(「users」)。儘管如此,看看我的解決方案......這裏可能會出現比賽情況。 (還有「更新」拼寫錯誤,「udpate」)。更新前可能會關閉連接。現在刪除數據庫關閉,看看會發生什麼。如果可以的話,也可以在這裏發佈錯誤。我很好奇。 –

+0

謝謝。當我使用你的版本時,db.users等於undefined。你在哪裏看到競賽狀況?也許是它的問題... – Matoy