MongoDBのマルチキーインデックスに問題があります。
、という名前のコレクションがusers
あり、そのドキュメントは多かれ少なかれ次のようになります。
{
"_id": ObjectId(),
"name": "John Smith",
...
"votes": [
{
"type": "news",
"votedObjectId": "123"
},
{
"type": "blog",
"votedObjectId": "124"
},
{
"type": "news"
"votedObjectId": "225"
}
]
}
にインデックスを作成し、votedObjectId
ユーザーが記事ごとに1回だけ投票するようにします。
一意のインデックスを確保しました(コードはnode.jsにあります-mongoskinモジュール):
`this.ensureIndex({'votes.votedObjectId': 1}, {unique: true}, ...)`
次に、同じ記事に2回投票してみましたが、実際にはまったく同じ投票が2回追加されました。
配列に重複する要素が含まれないようにするにはどうすればよいですか?
PS
{safe:true}を使用してすべての挿入を実行します。取得した重複値は、挿入操作では返されませんが、実際にはコレクションに挿入されます。