2015-06-01 49 views
0

更新我有收藏,結構如下圖所示, 我怎樣才能更新tags有:如何在MongoDB的

_id: 556c1c836e80082821f41d9f

_versions.id: 556c1c836e80082821f41da6

_versions._data._id: 556c71735ddb5010067f1beb

[{ 
    "_id": ObjectId("556c1c836e80082821f41d9f"); 
    "_name": "Product 1" 
    "_curr_version": ObjectId("556c1c836e80082821f41da6") 
    "_versions": [{ 
     "_id": ObjectId("556c71735ddb5010067f1be6"), 
     "_data": [{ 
       "_id": ObjectId("556c1cae82b9a3101787d20f"), 
       "_tags": ['sport', 'football'] 
      }, { 
       "_id": ObjectId("556c71735ddb5010067f1beb"), 
       "tags": ['golf'] 
      } 

     ] 
    }, 

    { 
     "_id": ObjectId("556c1c836e80082821f41da6"), 
     "_data": [{ 
       "_id": ObjectId("556c1cae82b9a3101787d20f"), 
       "_tags": ['sport', 'swimming'] 
      }, { 
       "_id": ObjectId("556c71735ddb5010067f1beb"), 
       "tags": ['tenis'] 
      } 

     ] 
    } 

    ] 

}] 
+0

爲這種多層次的更新使用的編程語言的代碼,仍然MongoDB中沒有提供這個一種查詢檢查[這](https://jira.mongodb.org/browse/SERVER-14164) – Yogesh

+0

可能重複[Mongoose MongoDB:更新嵌套數組中的對象](http://stackoverflow.com/questions/ 27 260573/mongoose-mongodb-updates-objects-in-an-nested-array) – JME

+0

我使用nodejs並使用mongosee驅動程序訪問mongodb。 – thinhnk

回答

0

我在nodejs上工作並使用mongosee驅動程序訪問mongodb。我找到了解決辦法。

  • 之前,我_versions._data._id: 556c71735ddb5010067f1beb位置保存爲pos VAR
  • 後,我有:

    var ObjectId = require('mongoskin').ObjectID; 
    var setObject = {}; 
    setObject["_versions.$._data."+ pos +"._tag"] = ['a','b']; 
    db.use("MongoDB").collection('collections').update({ 
         "_id": new ObjectId('556c1c836e80082821f41d9f'), 
         "_versions._id": new ObjectId('556c1c836e80082821f41da6') 
        }, 
        { 
         $set : setObject 
        }, 
        {}, 
        cb);