gpt4 book ai didi

node.js - 将文档添加到文档(子文档)不起作用

转载 作者:可可西里 更新时间:2023-11-01 10:13:12 24 4
gpt4 key购买 nike

不幸的是, 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 并返回正确的数据,但它们不能一起工作。我在哪里犯了错误?默认情况下,我想将所有集合(关注者中的名称)动态添加到我的架构中。

最佳答案

您需要重新定义架构才能使用 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 模型的引用保存为 userData 集合中的 _id,则此方法有效。

有关上述工作原理的深入解释,请参阅 docs .

关于node.js - 将文档添加到文档(子文档)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48401337/

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