所以我對mongoDb很新,所以我認爲這可能是對一般用法的誤解。所以忍受着我。 我有一個文件的架構我的工作因此mongoDB:重複值的唯一索引
{
name: "bob",
email: "[email protected]",
logins: [
{ u: 'a', p: 'b', public_id: '123' },
{ u: 'x', p: 'y', public_id: 'abc' }
]
}
我的問題是,我需要確保公衆IDS是文檔和收藏中是唯一的, 此外,還有一些現有的記錄是從遷移一個沒有記錄的mySQL DB,因此將全部替換爲mongo中的null
值。
我想它的任何一個指數
db.users.ensureIndex({logins.public_id: 1}, {unique: true});
這是不工作,因爲丟失的鑰匙,並拋出一個E11000 duplicate key error index:
或者這是一個更根本的問題的模式我不應該將對象嵌套到像這樣的數組結構中。在這種情況下,什麼?爲user_logins單獨收集?這似乎違背了嵌入式文檔的想法。
不幸的是我worte錯誤。 [糾正],我需要這個工作插入和更新。我認爲$ addToSet只適用於更新。此外,它需要每個查詢而不是數據庫約束。 – Roon 2011-04-12 10:29:33
@Roon:閱讀'upsert':http://www.mongodb。org/display/DOCS/Updating – 2011-04-12 10:39:04
使用upsert條件也意味着進行更新,這可能有助於檢查在u和p不同的情況下,嵌套文檔中是否已存在public_id。我認爲沒有任何解決方案,除了將嵌套文檔存儲在其自己的集合中,並使用_id字段或替代索引將限制實施爲數據庫約束。 – proximus 2011-04-12 10:55:59