在对上一个问题进行了一些帮助之后,我决定重新启动所有内容并查看代码的每个部分。当我在robot3T中运行此查询时,它不会返回任何问题。
db.getCollection('episode').find({show_id: ObjectId("5d54fca24456f4ee892395b1")})
当我运行以下代码时
const episode = new mongoose.Schema({
show_id: {type:mongoose.Schema.Types.ObjectId},
show_b: {type:String},
episode_no: {type:Number},
title:{type:String},
summary:{type:String},
description: {type:String},
link: {type:String},
enclosureurl: {type:String},
pubDate: {type:Date},
author: {type:String},
duration: {type:String},
explicit: {type:String}
});
const EpisodeModel=mongoose.model('episode',episode);
router.get('/ep', (req, res) => {
/* Pages.find({}, function(err, docs) {
if (!err){
console.log(docs);
process.exit();
} else {throw err;}
});
*/
EpisodeModel.find({}).exec(function(err, docs) {
if (!err){
res.status(200).json({
docs
})
//process.exit();
} else {console.log(err);}
});
});
而不是返回所有行,而是返回
{"docs":[]}
所以有些事情是完全错误的。
我在下面留下了一个RAW JSON字符串,您可以使用该字符串创建自己的JSON mongodb并将其插入收藏集。
{
"show_id" : ObjectId("5d54fca24456f4ee892395b1"),
"show_b" : "rantshow",
"episode_no" : 1,
"title" : "episode 1",
"summary" : "this is a test",
"description" : "test",
"link" : "test",
"enclosureurl" : "test",
"pubDate" : ISODate("2019-08-05T09:40:00.201Z"),
"author" : "Radio Media PTY LTD",
"duration" : "01:00:00",
"explicit" : "yes"
}
答案 0 :(得分:0)
从表面上看,您的查询看起来应该可以工作。当您尝试在猫鼬之外运行它时,它起作用吗? (例如,在Studio3T中或通过CLI)
猫鼬可能会感到困惑,因为您的show_id看起来像一个ObjectId,但是在您的架构中被指定为字符串。之所以有时会发生这种情况,是因为Mongoose默认情况下会在需要时将字符串转换为ObjectIds(这样您就不必手动执行此操作)。
我认为这是作为显示文档的关系引用存储的。如果是这种情况,那么您应该按照以下步骤更改架构:
const episode = new mongoose.Schema({
show_id:{type: mongoose.Types.ObjectId, ref: 'show'},
...
});
ref
属性应该是您注册了显示模式模型的任何属性。例如,您上面的情节模式使用了“ episode”一词。
您可能需要更新数据库中的情节文档,以确保它存储了ObjectId而不是字符串。
编辑
您的新实现几乎是正确的。如果您将一个配置添加到情节模式中,那么它应该可以工作。
const episode = new mongoose.Schema({
show_id: {type:mongoose.Schema.Types.ObjectId},
show_b: {type:String},
episode_no: {type:Number},
title:{type:String},
summary:{type:String},
description: {type:String},
link: {type:String},
enclosureurl: {type:String},
pubDate: {type:Date},
author: {type:String},
duration: {type:String},
explicit: {type:String}
}, { collection: 'episode'});
请注意,在此架构对象的底部,我已指示它应使用情节集合。将其更改为您用于剧集的任何收藏集。我在一个本地项目中对此进行了测试,它对我的其余代码都适用。