2016-04-06 104 views
0

我需要在文檔中存儲三個id:s,但它們只能出現一次。例如下面的文件只能在此集合出現一次:MongoDB集合中的唯一文檔

{ 
    "user": ObjectId("j8uwh902w5489"), 
    "comment": ObjectId("09890583457jkjsf4"), 
    "whatever": ObjectId("j8uwh902w5489") 
} 

如何確保這將是MongoDB中一個獨特的文件?

+0

目的是什麼? –

+0

我想知道什麼人會是他們的工作地點和工作對象。這就是爲什麼我希望組合是獨一無二的。 – Oskar

回答

1

那麼你可以使用MongoDB's Unique Compound Index

db.users.createIndex({ user: 1, comment: 1, whatever: 1 }, { unique: true }) 

少數病例:

> db.users.insert({user: "A", comment: "B", whatever: "C"}) 
WriteResult({ "nInserted" : 1 }) 
> db.users.insert({user: "A", comment: "C", whatever: "B"}) 
WriteResult({ "nInserted" : 1 }) 
> db.users.insert({user: "A", comment: "B", whatever: "C"}) 
> WriteResult({ 

    "nInserted" : 0, 
    "writeError" : { 
      "code" : 11000, 
      "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.users.$user_1_comment_1_whatev 
er_1 dup key: { : \"A\", : \"B\", : \"C\" }" 
    } 
}) 

我知道我在這裏使用的字符串。但是ObjectIds也可能類似。請試試看。

+0

這不僅僅是使每個單獨的財產獨特,而不是組合?我曾嘗試將它們保存爲adminMongo的ObjectId(),但由於某些原因,它們都從'_id'獲取了id,而不是我試圖保存的id。 – Oskar

+0

請查看最新的答案。 –

+0

我現在沒有時間測試,但它看起來像我想要的,所以我接受它! – Oskar

相關問題