我正在努力獲得使用Mongoose查詢數組時所期望看到的內容。用戶可以有多個與他/她的帳戶關聯的房間。房間對象存儲在集合中附屬於用戶的數組中。只有一個稱爲用戶的集合。Mongoose Mongodb查詢對象數組
考慮以下兩個模式供用戶和房間:
用戶架構
var userSchema = mongoose.Schema({
local : {
username : String,
email : String,
password : String,
rooms : {type:Array, default: []}
}
});
ROOM SCHEMA
var roomSchema = mongoose.Schema({
name: String
});
這是我曾嘗試查詢:
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();
}
});
問題是這個查詢似乎總是返回一個空的數組,即使它應該contiain的東西或者它應該什麼都不返回。那麼,我將如何搜索所有用戶房間數組,以查看房間名稱是否已存在?
我也曾嘗試以下的查詢,但既不是成功的:
User.find({local: {rooms: {$elemMatch: {name: req.body.username}}}}, function (err, user) {
}
User.find({'local.rooms': {$elemMatch: {name: req.body.username}}}, function (err, user) {
}
我還應當指出的是,數據庫被填充,我可以看到陣列(其具有對用戶帳戶的創建創建1個元件)在robomongo。從控制檯輸出
樣品的數據顯示數據庫被填充(包括user.rooms陣列):
db.users.find() { 「_id」:的ObjectId( 「533c4db2b2c311a81be8a256」),「本地「:{」password「:」$ 2a $ 08 $ 0yQQJ2y0726kZtkWY5mAPOgZhacOmZn0Fd8DlausiuMB XE4ZblTXS「,」username「:」paul「,」email「:」test「,」rooms「:[{」name「:」paul「,」id「:ObjectId(」533c4db2b2c311a81be8a2 57「)}],」status「:」active「},」 _v「:0} {」_id「:ObjectId(」533c4ddab2c311a81be8a258「),」local「:{」password 「:」$ 2a $ 08 $ dC3CbDTkG5ozECDTu/IicO3 Az0WdkzlGh2xDcb8j1CF/ FQhe5guZq「,」username「:」john「,」email「:」test2「,」rooms「:[{」name「:」john「,」id「:ObjectId(」533c4ddab2c311a81be8a 259「)} ], 「狀態」: 「活動」}, 「 _V」:0}
數據在mongo shell的「用戶」集合中的實際外觀如何?我還發現模式定義存在一些問題,如果數據在一個或兩個集合中,則不會清楚說明。你可以添加這個到你的問題。 –
您對Schema Neil Lunn有什麼問題?數據全部集中在一個集合中。 – Paulie
其他問題更重要,所以如果您可以編輯它會有所幫助。我在這裏指的是「roomSchema」似乎沒有被使用。它通常會在「userSchema」中引用。但是我們需要看到的最重要的是你的一些數據。 –