使用node.js和express.js在Mongoose模型内搜索

使用node.js和express.js在Mongoose模型内搜索,node.js,express,find,schema,mongoose,Node.js,Express,Find,Schema,Mongoose,在猫鼬中,我有一个模型: var userschema = new mongoose.Schema({ user: String, following: [String], followers: [String] }); var UserModel = db.model('UserModel', userschema); 但我不知道是谁在搜索,在一个用户中,在following和followers数组中搜索。很容易,我就可以做到UserModel.find({use

在猫鼬中,我有一个模型:

var userschema = new mongoose.Schema({

  user: String,   
  following: [String],
  followers: [String]

}); 

var UserModel =  db.model('UserModel', userschema);
但我不知道是谁在搜索,在一个用户中,在following和followers数组中搜索。很容易,我就可以做到
UserModel.find({user:req.session.user},function(err,user){[…]})
但是在这里面,我想在数组
后面的
跟随者
中搜索一个特定的字符串。我可以使用
for循环
,但我认为如果数组中有很多字符串,搜索一个会很慢,甚至有问题。有可能这样做吗

UserModel.findOne({ user: req.session.user }, function(err, user){

   if (err) throw err;    

     user.findOne({ following: randomstring }, function(err, nuser){

        if (err) throw err;

     });

});

我认为这段代码不起作用,但也许有一种方法可以实现我想要的功能,而不必使用
for循环
。任何解决方案…?

不,您不能在
user
文档实例上调用
findOne
。您可以改为在主
用户模型中包含
以下
字段。findOne
调用如下:

UserModel.findOne({ user: req.session.user, following: randomstring }, 
    function(err, user){ ...
在回调中,
user
仅当该用户遵循
randomstring
时才会被设置

当然,您也可以使用在代码中轻松搜索数组:

if (user.following.indexOf(randomstring) !== -1) {
    // user is following randomstring
}