솔직히 나를 미치게합니다.배열 서브 문서에서 몽구 검색 ObjectId가 작동하지 않음
var userSchema= new mongoose.Schema(
{
uname:{type:String, index:{sparse:true, unique:true, dropDups:true}}, //the username
email:String,
pwd:{type:String},
flwng:[{_id : {type : mongoose.Schema.ObjectId},uname : String}], //_id of users I am following
flwrsz:Number,
flwngsz:Number,
feedsz:Number,
}, {j: 1});//j:1 means guarantee it is written to the journal.
userSchema.set('autoIndex', true);
userSchema.index({"fid":1}, {sparse:true, unique:true, dropDups:true});
userSchema.index({"flwng._id" : 1});
경우 UID = "53c4f16c431247694f0000a3"==>하지만 난 얻을 : 나는 몽구스에서 다음 쿼리를 실행 해요
: 다음 사용자 스키마에
s.findSubdocument=function(uid, cb)
{
this.model('User').find({"flwng._id":uid.toString()}).select('flwng').exec(cb);
}
여기에 문제의 빈 배열 back :(
문구 셸에서 똑같은 쿼리를 실행할 때 :
db.users.find({"flwng._id":"53c4f16c431247694f0000a3"});
올바른 결과를 얻을 수 있습니다. 나는 "flwng._id"에서 인덱스와 스키마를 사용하지 않고 시도했지만, 인덱스를 삭제하려고 시도했지만 reIndex는 이제 아이디어가 부족합니다. 몽구스에 뭔가 잘못하고 있는거야?
도움이 될 것입니다 - 감사합니다! Henri
맞네요! 나는 flwng를 flwng : Array로 바 꾸었습니다. 이제는 올바른 결과 집합을 반환합니다. 기존 String을 ObjectID로 변환하기 위해 어떤 전략을 권장합니까? 나는 결과를 반복하고 그 값을 다음과 같이 캐스팅하지 않으려 고 노력했다. users [i] .flwng [j] ._ id = new mongoose.Types.ObjectId (sUid); 사용자 [i] .save() – cybermach
작동하도록했습니다! 감사합니다 피터. 비슷한 문제가 발생하는 경우, 몽구스에서 다음 쿼리로 작업하기 위해 String -> ObjectId 마이그레이션을 얻었습니다. \t this.model ('User'). update ({ "flwng._id": uid.toString()}, { "flwng. $ ._ id": uid}, {multi : true}) .exec (cb); – cybermach