私は特定の単純なケースを扱っています。私はこれに対する解決策を見つけることができないように思われるので、私はいくつかの助けが必要です。
javascriptクラス内にMongoDBの単純なスキーマとモデルを作成しました。
this.UserSchema = new this.Schema({
UserId: { type: String },
IsToggle: { type: Boolean}
});
this.CalendarViewUserSchema = new this.Schema({
_id: { type: this.Schema.ObjectId },
OwnerId: { type: String },
UserList: [ this.UserSchema ]
});
this.CalendarViewUser = this.mongoose.model('CalendarViewUsers',this.CalendarViewUserSchema);
これはコンストラクターにあり、すでに多くのデータベースインタラクションが機能していますが、これを機能させることができません。
新しいドキュメントを追加するために、このメソッドを呼び出します。
AddCalendarViewUser : function(Id, UserToAddId){
NewUser = { UserId : UserToAddId, IsToggle : false };
this.CalendarViewUser.update(
{ OwnerId : Id },
{
$set: { OwnerId : Id },
$push: { UserList : NewUser }
},
{upsert:true},
function(err){
if(err) {console.log(err);}
else {console.log('Success');}
}
);
}, // this comma just introduces the next method.
これは正常に機能します。Mongo Explorerを使用すると、ドキュメントが正しく作成されていることがわかります。.find()を使用してコレクションからすべてを取得すると、ドキュメントが表示されます。
次に、挿入されたドキュメントを次のように検索します。
FindCalendarViewUser : function(Id){
this.CalendarViewUser.findOne(
{ OwnerID : Id },
function(err,result){
if(err) {console.log(err);}
else{console.log(result);}
}
);
}
ここでは、result=nullを返します。
「Id」パラメータは、スキーマの「OwnerId」と同様に、両方のメソッドの文字列です。
私は何が間違っているのですか?
「OwnerId」と「Id」はどちらも同じです。また、両方をObjectIdに変換しようとしましたが、成功しませんでした。
コードのフォーマットについて申し訳ありません。
編集:
基本的に、_idフィールドを使用してドキュメントを見つけることができます。
{ _id : '4fb0d1702edfda0104fc2b9f'}
しかし、OwnerIdフィールドでは見つかりません。
{ OwnerId : '4f55e1a6c2c7287814000001'}
これらの値はデータベースから直接取得されたため、実際に保存されている値に対応しています。
編集2:
手で値を挿入すると、次のことがわかりました。
$set: { OwnerId : '4f55e1a6c2c7287814000001' }
次に、まったく同じ文字列で検索すると、ドキュメントが返されます。
this.CalendarViewUser.findOne(
{ OwnerID : '4f55e1a6c2c7287814000001'}
...
したがって、ドキュメントのOwnerIDフィールドに何らかのゴミが挿入されているか、フィールドのTypeと何らかの非互換性があったと思います。結果を掲載します。