gpt4 book ai didi

node.js - 如何使用 Mongoose 在 MongoDB 模式中填充子级

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:26 25 4
gpt4 key购买 nike

我有 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);

用户. 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) {

})
})

当我显示用户时,它应该填充/检索与该用户关联的所有 token 。目前它没有这样做。

查询

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
}
]

但是,当我显示 token 时,它正在检索关联的用户。

查询

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
}
]

如何检索具有所有关联 token 的用户?

最佳答案

This should be like a 1-to-Many relationship.

感觉在您的解决方案中,您正在建模 NN 关系:

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)
})
})

关于node.js - 如何使用 Mongoose 在 MongoDB 模式中填充子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35092966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com