#javascript #mongodb #node.js #mongoose
#javascript #mongodb #node.js #mongoose
Вопрос:
> db.users.findOne();
{
"_id" : ObjectId("4db8ebb4c693ec0363000001"),
"fb" : {
"name" : {
"last" : "Sss",
"first" : "Fss",
"full" : "Fss"
},
"updatedTime" : "2011-04-27T09:51:01 0000",
"verified" : true,
"locale" : "en_US",
"timezone" : "-7",
"email" : "abc@gmail.com",
"gender" : "male",
"alias" : "abc",
"id" : "17447214"
}
}
Итак, это мой объект Mongo. Теперь я хочу найти его через Mongoose:
User.findOne( { gender: "male" }, function(err, docs){
console.log(err); //returns Null
console.log(docs); //returns Null.
});
Это не работает! Это также не:
User.findOne( { fb: {gender:"male"} }, function...
Нуль, нуль.
Это вся моя фишка:
app.get('/:uid',function(req,res){
params = {}
User.findOne({ $where : "this.fb.gender == 'male' " }, function(err, docs){
console.log(docs);
});
res.render('user', { locals:params });
});
Комментарии:
1. Где
User
определено?
Ответ №1:
Я один из авторов mongoose. Вы можете выполнить этот запрос одним из нескольких способов:
-
find
синтаксисUser.findOne({'fb.gender': 'male'}, callback);
-
where
синтаксисUser.where('fb.gender', 'male').findOne(callback);
-
синтаксис именованной области
UserSchema.namedscope('male').where('fb.gender', 'male'); // ... var User = mongoose.model('User', UserSchema); // Now you can write queries even more succinctly and idiomatically User.male.findOne(callback);
Комментарии:
1. namedScope был удален из Mongoose, но я создал плагин, который имитирует его: github.com/gberger/mongoose-named-scopes
Ответ №2:
Попробуйте это :
User.findOne( { $where : "this.fb.gender == 'male' " } )
или
User.findOne( { fb.gender : "male" } )
Комментарии:
1. Спасибо! Вы знаете, почему я получаю эту ошибку при ее запуске? : DEBUG: ошибка типа: не удается прочитать свойство ‘auth’ undefined на HTTPServer.<анонимный>
2. понятия не имею, я вообще не использовал NodeJS, я задал запрос на основе моего опыта работы с mongodb javascript.
3. Это действительно отвечает на вопрос о запросе по fb.gender. TIMEX вроде как задал другой вопрос в своем комментарии.