不幸的是,但mongoose中的子文档不起作用,我不知道原因:
...
mongoose.connect('mongodb://zzz@xxx.ccc.com:59676/zxcv');
var Schema = mongoose.Schema;
var entrySchema = Schema({
title: String,
img: String,
info: String,
link: String
}, {collection: 'xxx'});
var userDataSchema = Schema({
name: String,
password: { type: String, select: false},
birth: Number,
followers: [{ "name": String}],
entry: [entrySchema]
}, {collection: 'yyy'});
var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);
app.get('/:user', function(req, res) {
UserData.findOne( {'name': req.params.user}, function(err, user) {
if (err)
res.send(err);
res.json(user);
});
});
此代码返回userDataSchema方案中的数据和空条目:[]。 我可以单独查询userDataSchema和entrySchema并返回正确的数据,但它不能一起工作。我在哪里弄错了? 默认情况下,我想动态地将所有集合(关注者中的名称)添加到我的架构中。
答案 0 :(得分:1)
var entrySchema = new Schema({
^^^
title: String,
img: String,
info: String,
link: String
});
修改:当您使用entrySchema
声明{collection: 'xxx'}
时,您强制mongoose创建名为xxx
的separete集合,这就是您应该引用{的原因如chridam的回答所述,在entrySchema
内{1}},或删除收集选项:userDataSchema
答案 1 :(得分:1)
您需要重新定义架构以使用 populate()
:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var entrySchema = Schema({
title: String,
img: String,
info: String,
link: String
}, {collection: 'xxx'});
var userDataSchema = Schema({
name: String,
password: { type: String, select: false },
birth: Number,
followers: [{ "name": String}],
entry: [{ type: Schema.Types.ObjectId, ref: 'entry' }]
}, {collection: 'yyy'});
var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);
app.get('/:user', function(req, res) {
UserData.findOne({'name': req.params.user})
.populate('entry')
.exec(function(err, user) {
if (err)
res.send(err);
res.json(user);
});
});
这是有效的,因为您实际上已将entry
模型的引用保存为_id
集合中的userData
。
如需深入解释上述方法,请参阅docs。