使用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
}