在使用Mongoose查询数组时,我很难得到预期的结果.一个用户可以有许多与他/她的帐户关联的房间.房间对象存储在集合中与用户相连的数组中.只有一个名为"用户"的集合.
考虑以下两个用户和房间模式:
用户模式
var userSchema = mongoose.Schema({
local : {
username : String,
email : String,
password : String,
rooms : {type:Array, default: []}
}
});
房间模式
var roomSchema = mongoose.Schema({
name: String
});
这是我try 过的问题:
var User = require('../models/user');
User.find({ 'rooms.name' : req.body.username },
{ rooms:
{ $elemMatch :
{
name: req.body.username
}
}
}, function (err, user) {
if (err){
return done(err);
}
console.log("user:::", user);
if (user) {
console.log("ROOM NAME FOUND");
req.roomNameAlreadyInUse = true;
next();
} else {
req.roomNameAlreadyInUse = false;
console.log("ROOM NAME NOT FOUND");
next();
}
});
问题是,这个查询似乎总是返回一个空数组,即使它应该包含一些内容或不应该返回任何内容.那么,我如何搜索所有用户的房间数组,以查看房间名称是否已经存在?
我也try 过以下方法来解决问题,但都不成功:
User.find({local: {rooms: {$elemMatch: {name: req.body.username}}}}, function (err, user) {
}
User.find({'local.rooms': {$elemMatch: {name: req.body.username}}}, function (err, user) {
}
我还应该指出,数据库是填充的,因为我可以在robomongo中看到数组(在创建用户帐户时创建了一个元素).
控制台输出的示例数据显示正在填充数据库(包括user.rooms数组):
db.用户.查找()