[英]How To Populate Children In MongoDB Schema Using Mongoose
我有2個文檔:“用戶文檔”和“ UserToken文檔”。 這應該像一對多關系。
user.model.js
var UserSchema = new Schema({
username: {
type: String,
unique: true,
required: true
},
email: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true
},
active: {
type: Boolean,
default: false,
},
tokens: [{
type: Schema.ObjectId,
ref: 'UserToken'
}],
});
module.exports = mongoose.model('User', UserSchema);
usertoken.model.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserTokenSchema = new Schema({
type: {
type: String
},
token: {
type: String
},
expiry: {
type: Date,
default: null
},
user: [{
type: Schema.ObjectId,
ref: 'User'
}]
});
module.exports = mongoose.model('UserToken', UserTokenSchema);
user.controller
var user = new User({
username: input.username,
email: input.email,
password: input.password,
active: false
});
user.save(function(err) {
var userToken = new UserToken({
type: 'new',
token: token,
expiry: null,
user: user._id
userToken.save(function(err) {
})
})
當我顯示一個用戶時,它應該填充/檢索與該用戶關聯的所有令牌。 目前,它沒有這樣做。
詢問
User.find({})
.populate('tokens')
.exec(function(err, users) {
if(err) return res.json({success: 'false', errors: err});
return res.json(users);
});
數據
[
{
username: "TestUser",
email: "TestEmail@hotmail.com",
password: "$2a$10$I4wJ.e3eVK7EMcfdf46x0e5kYnSTzHPTcBmzXIctduM./pZEiGbPG",
_id: "56ab4bbfa8f3e11813803566",
__v: 0,
tokens: [ ],
active: false
}
]
但是,當我顯示令牌時,它正在檢索關聯的用戶。
詢問
UserToken.find({})
.populate('user')
.exec(function(err, tokens) {
if(err) return res.json({success: 'false', errors: err});
return res.json(tokens);
});
數據
[
{
type: "new",
token: "16c72da8-78a7-4ee1-9b03-f5e490d7e010",
_id: "56ab4bbfa8f3e11813803567",
__v: 0,
user: [
{
username: "TestUser",
email: "TestEmail@hotmail.com",
password: "$2a$10$I4wJ.e3eVK7EMcfdf46x0e5kYnSTzHPTcBmzXIctduM./pZEiGbPG",
_id: "56ab4bbfa8f3e11813803566",
__v: 0,
tokens: [ ],
active: false
}
],
expiry: null
}
]
如何獲取帶有所有關聯令牌的用戶?
這應該像一對多關系。
感覺到您在解決方案中正在建立N對N的關系:
var UserSchema = new Schema({
tokens: [{
type: Schema.ObjectId,
ref: 'UserToken'
}]
...
var UserTokenSchema = new Schema({
user: [{
type: Schema.ObjectId,
ref: 'User'
}]
...
另外,如何在數據庫中插入數據? 請記住,沒有框架可以理解這種關系 ,您必須手動進行(每次創建新文檔時都要更新引用)。例如
var u1 = { ... }
Users.create(u1, function(err, user) {
UserTokens.findAndUpdate(userTokenId, {user: user._id}, function(err, uToken){
// now userToken has the reference to your new user (u1)
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.