2014-02-10 79 views
0

我使用Sails.js(0.9.8)和MongoDB(通過sails-mongo適配器)創建可以定位在樹視圖中的頁面集合。我想一個頁面的路徑存儲的UUIDSails.js和MongoDB:重複鍵錯誤索引

數組

我的模型:

module.exports = {  
    schema: true, 
    attributes: { 
     uuid: { 
      type: 'string', 
      unique: true, 
      required: true, 
      uuidv4: true 
     }, 
     name: { 
      type: 'string', 
      required: true, 
      empty: false 
     }, 
     path: { 
      type: 'array', 
      required: true, 
      array: true 
     } 
    } 
} 

它運作良好,當我保存一個「根」頁面(在「路徑」屬性只是一個項目。因爲它是一個根頁面下面是它被保存在MongoDB中:

{ 
    _id: ObjectId("52f853e9609fb6c0341bdfcc"), 
    createdAt: ISODate("2014-02-10T04:22:01.828Z"), 
    name: "Home Page", 
    path: [ 
     "a2b23e1f-954b-49a3-91f1-4d62d209a093" 
    ], 
    updatedAt: ISODate("2014-02-10T04:22:01.833Z"), 
    uuid: "a2b23e1f-954b-49a3-91f1-4d62d209a093" 
} 

但是,當我想創建下面我以前創建的頁面(首頁/產品),一個「子頁」,我得到這個錯誤:

MongoError: E11000 duplicate key error index: cms-project.item.$path_1 dup key: { : "a2b23e1f-954b-49a3-91f1-4d62d209a093" }

這裏是我發送的數據:

{ name: 'Products', 
    uuid: 'a004ee54-7e42-49bf-976c-9bb93c118038', 
    path: 
    [ 'a2b23e1f-954b-49a3-91f1-4d62d209a093', 
    'a004ee54-7e42-49bf-976c-9bb93c118038' ] } 

我可能錯過了一些東西,但我不知道是什麼。 如果我將路徑存儲在一個字符串而不是一個數組中,它可以很好地工作,但我覺得它不那麼優雅和方便。

回答

3

不知道所有的帆/水線部分我自己,因爲我從來沒有玩過它。但由錯誤問題是你的數組字段上有一個獨特的索引。

插入第二個文檔時,在另一個文檔的路徑字段中已經有一個值(父項)。唯一的限制是不會允許的。當然,對於你正在建模的東西,你不需要這個,索引不能是唯一的。

我希望你自己設置它,假設它在文檔中包含的數組中是唯一的。如果你這樣做,那麼你就知道該去哪裏以及現在要改變什麼。如果這是以某種方式自動部署的,那麼我不是那個可以幫忙的人。

將索引更改爲不唯一。您可以通過蒙戈外殼證實了這一點:

use cms-project 
db.item.getIndices() 

好運

+0

謝謝您的回答,它幫助我解決我的問題!我對這個集合做了幾次測試,實際上對'path'屬性仍然有一個唯一的約束,即使我從Sails.js模型中刪除它。 – Etienne

相關問題