Mongoose:在集合中查找用户并检查此用户的数组是否包含x?

时间:2014-05-13 15:51:50

标签: javascript arrays mongodb mongoose

我有一个名为'users'的集合,其中典型的用户条目如下所示:

{
"__v" : 0,
"_id" : ObjectId("536d1ac80bdc7e680f3436c0"),
"joinDate" : ISODate("2014-05-09T18:13:28.079Z"),
"lastActiveDate" : ISODate("2014-05-09T18:13:48.918Z"),
"lastSocketId" : null,
"password" : "Johndoe6",
"roles" : ['mod'], // I want this to be checked
"username" : "johndoe6"
}

我想创建一个找到用户变量targetuser的if函数,并检查他的'roles'数组是否包含'mod'。 如何用猫鼬做到这一点?

1 个答案:

答案 0 :(得分:0)

可以轻松完成。下面的代码详细描述了为实现这一目标必须采取的措施。

步骤:

  1. 获取mongoose模块
  2. 连接到mongo并找到合适的数据库
  3. 制作集合的模式(在本例中仅为用户)
  4. 添加一个自定义方法,如果角色' mod'存在于数组中。注意:mongo集合没有结构,因此如果属性'角色'可能会运行检查。存在,它是一个数组。
  5. 为创建的架构建模。
  6. 通过查找随机(一个)文档/用户并检查它是否是主持人来测试它。
  7. 所以,这被编程为:

    //  get mongoose.
    var mongoose = require('mongoose');
    
    //  connect to your local pc on database myDB.
    mongoose.connect('mongodb://localhost:27017/myDB');
    
    //  your userschema.
    var schema = new mongoose.Schema({
      joinDate      : {type:Date, default:Date.now},
      lastActiveDate: Date,
      lastSocketId  : String,
      username      : String,
      password      : String,
      roles         : Array
    });
    
    //  attach custom method.
    schema.methods.isModerator = function() {
      //  if array roles has text 'mod' then it's true.
      return (this.roles.indexOf('mod')>-1);
    };
    
    //  model that schema giving the name 'users'.
    var model = mongoose.model('users', schema);
    
    //  find any user.
    model.findOne({}, function(err, user)
    {
      //  if there are no errors and we found an user.
      // log that result.
      if (!err && user) console.log(user.isModerator());
    });