gpt4 book ai didi

mongodb - 如何正确初始化 Mongoose 集合中的文档

转载 作者:IT老高 更新时间:2023-10-28 12:30:50 25 4
gpt4 key购买 nike

如果不推荐我的设计,请纠正我:

我有一个带有“类别”字段的博客文章模型。我希望用户能够输入类别(提前输入),如果类别不存在,用户将能够创建它。但是,为了防止杂乱无章的条目,我想用类别列表填充“类别”字段。

问题是,我应该将字段“category”用作数组还是引用另一个名为“Category”的模型的子文档?我假设后者将是推荐的设计,因为它避免了代码复制并简化了用户添加新类别所需的交互。

现在,如果我将它与子文档一起使用,我如何在服务器启动时使用类别列表初始化模型“类别”?

最佳答案

你为什么不使用这样的东西。

//Category schema
//Store all the categories available in this collection
var categorySchema=new Schema({
_id:String,//name of category
description:String
//other stuff goes here
})
mongoose.model(categorySchema, 'Category')

//blog post schema
var postSchema=new Schema({
//all the relevant stuff
categories:[{type:String,ref:'Category'}]
})

现在每当发布 blog post 时,请检查 categories 是否已经存在于 Category 集合中。这将很快,因为我们使用类别名称 (_id) 作为索引本身。因此,对于每个新类别,您应该在 Category 集合中插入,然后插入 blog post。这样,如果需要,您可以 populate categories 数组。

要初始化分类,可以通过解析一个可读性更强的JSON文件来完成。仅当我们使用空数据库(即删除 Categories 集合时)才应该解析文件

创建一个 Categories.json 文件。 Categories.json 的内容:

[
{
_id:'Category1',//name of category
description:'description1'
...
},
{
_id:'Category2',//name of category
description:'description2'
...
},{
_id:'Category3',//name of category
description:'description3'
...
}
...
]

从文件中读取数据

fs=require('fs');
var buildCategories=fs.readFile(<path to Categories.json>,'utf8',function(err,data){

if (err) {
//logger.error(err);
return ;
}
var datafromfile=JSON.parse(data);
data.forEach(function(obj){
var catOb=new Category(obj)
obj.save(function(err,doc){..});
})
});
//To initialize when the Category collection is empty
Category.findOne({},function(err,doc){
if(!doc){
//Collection is empty
//build fomr file
buildCategories();
}
});
//Or you can just manually call the function whenever required when server starts
buildCategories();

您可能会争辩说您可以导入 csv 文件。但这就是我为我的项目所做的。

关于mongodb - 如何正确初始化 Mongoose 集合中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091473/

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