ソーシャルメディアの友達をユーザーのドキュメントにキャッシュしようとしていますが、保存/復元に問題があります。最初に、友達のキャッシュをやみくもに取り除き、データの新しいフェッチで埋めるだけでしたが、それを通して、埋め込まれたドキュメントはすべてのユーザー間で一意である必要があることがわかりました(同じ友達が2人います私のテストアカウントでは、次のようになります。
{"name":"MongoError","err":"E11000 duplicate key error index: test-dev.users.$friends.outsideID_1 dup key: { : \"1205314313242\" }","code":11001,"n":0,"connectionId":274,"ok":1}
このことから、その埋め込みドキュメントは、すでに登録および更新されている他のアカウントに存在するため、そのドキュメントを作成できないことがわかります(outsideIDは、後で検索する予定なので、インデックスです))そこで、OutsideFriend.find( {'outsideID':{$ in:friendsIDs}}(friendsIDsはSMクエリから取得したIDの配列です)など。次に、コールバックで新しい友達を追加して、問題のユーザーに既存のドキュメントを提供して、システム内で複製しようとしないようにします。ただし、何らかの理由で、OutsideFrind.find()がドキュメントを返すことはありません...これにより、埋め込まれたドキュメントは一元化されていないと思います。 。しかし、なぜ最初の試みは失敗するのでしょうか?
これをどのように行うのですか?(以下のスキーマ、他に情報が必要な場合はお知らせください!)
現在のスキーマ:
//External friend model
var OutsideFriend = new Schema({
outsideID:{type:String, index:true, unique:true}
,username:String
,location:String
,avatarURL:String
});
//User model
var User = new Schema({
avatarURL:String
,mySMID:String
//Social Media info
,smID:{type:String, index:true, unique:true}
,tok:String
,tokSec:String
,friends:[OutsideFriend]
};