1

コレクションに入れているオブジェクトの「スキーマ」は、次のようになります。

{
    name : "Niranjan", //<--key
    children : ["Suraj", "kalidas", "Suraj"]
}

ただし、子がセットとして扱われるようにしたかったのです。上記の例では、「Suraj」が配列に2回表示されるため、Mongoがレコードを受け入れないようにしました。

名前と子に対して一意のインデックスを作成してみました

db.folks.ensureIndex({name:1,children:1},{unique:true})

ただし、これが行うことは、任意の子名+フォーク名に対してグローバルに一意のインデックスを作成することです。つまり、名前に一意のインデックスがない場合は、次のことができます。

db.folks.insert({name:'p',children:['c1','c2']})
db.folks.insert({name:'p',children:['c3']})

p + c1、p + c2、p+c3は異なるためです。以下を挿入しようとした場合:

db.folks.insert({name:'p',children:['c4','c1']})

その後、私は取得します

E11000 duplicate key error index: test.folks.$name_1_children_1  dup key: { : "p", : "c1" }

https://stackoverflow.com/questions/9640233/unique-array-values-in-mongooseのように、挿入中にチェックを行わずにこれを実現する方法はあり ますか?

4

1 に答える 1

2

一意のインデックスは、MongoDBの将来のリリースで期待するように機能します。

https://jira.mongodb.org/browse/SERVER-1068

今のところ、挿入する前にアプリケーションの一意性を確認する必要があります。

ちなみに、ドキュメントを更新するときは、$pushの代わりに$addToSetを使用して、一意性を強制できます。

http://www.mongodb.org/display/DOCS/Updating#Updating-%24addToSetand%24each

于 2012-03-23T18:36:47.553 に答える