0

上記のように、プロパティ「名前」はすべてのドキュメントで一意である必要があります。

{ 
    "_id" : ObjectId("56686341d6389c004c689d5d"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "John"
        },
        "B2" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary"
        }
    }
}

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

この構造で一意のインデックスを作成することは可能ですか?

4

1 に答える 1

1

はい、に一意のインデックスを作成する必要がありますBosses.Name。ただし、スキーマを少し変更する必要があります。Bosses配列でなければなりません:

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : [
        {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

が本当に必要な場合は、オブジェクトB1に追加することをお勧めしBossesます: "Code": "B1". ただし、配列内のインデックスにアクセスできるため、これは必要ない場合があります。...find({ "Bosses.0.Name" })

于 2015-12-09T18:05:58.457 に答える