简体   繁体   中英

Search inside a Mongoose model with node.js and express.js

In mongoose I've got this model:

var userschema = new mongoose.Schema({

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

}); 

var UserModel =  db.model('UserModel', userschema);

But I don't know who search, inside a user, search inside the following and followers array. Easily, I can do this UserModel.find({ user: req.session.user }, function(err, user){[...]}) But inside that, I want to search a specific string inside the arrays following and followers . I can do it using a for loop , but I think if I have a lot of String inside the array, search one would be slow, or even problematic. Is posible do this?:

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

   if (err) throw err;    

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

        if (err) throw err;

     });

});

I think that this code won't work, but maybe there is a way to do what I want without using a for loop . Any solution...?

No, you can't call findOne on the user document instance. What you can do instead is include the following field in your main UserModel.findOne call like this:

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

In the callback, user would only be set if that user was following randomstring .

Of course, you can also use array.indexOf to easily search the array in code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM