Mongoose:在集合中查找用户并检查该用户的数组是不是包含 x?
Posted
技术标签:
【中文标题】Mongoose:在集合中查找用户并检查该用户的数组是不是包含 x?【英文标题】:Mongoose: Finding a user in a collection and checking if this user's array contains x?Mongoose:在集合中查找用户并检查该用户的数组是否包含 x? 【发布时间】:2014-07-01 09:44:20 【问题描述】:我有一个名为“用户”的集合,其中典型的用户条目如下所示:
"__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"
我想创建一个 if 函数来查找用户变量 targetuser,并检查他的“roles”数组是否包含“mod”。 猫鼬如何做到这一点?
【问题讨论】:
【参考方案1】:这很容易做到。下面的代码详细描述了实现这一点必须做的事情。
步骤:
-
获取猫鼬模块
连接到 mongo 并找到正确的数据库
为您的集合创建一个架构(在这种情况下仅限用户)
添加一个自定义方法,如果角色“mod”存在于数组中,则返回true。注意:mongo 集合没有结构,因此最好检查一下属性“roles”是否存在并且它是一个数组。
为创建的架构建模。
通过查找随机(一个)文档/用户来测试它,并检查它是否是版主。
所以,这被编程为:
// 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());
);
【讨论】:
以上是关于Mongoose:在集合中查找用户并检查该用户的数组是不是包含 x?的主要内容,如果未能解决你的问题,请参考以下文章
检查用户 ID 是不是在 mongoose 文档中 - 如果是,将属性值更改为 true?