MongoDB遇到的问题记录
概述
我將記錄我在MongoDB嵌入文件中遇到的問題。
关于MongoDB数据保存的方式。
MongoDB 被分类为 NoSQL 数据库,它通过 JSON 类似的格式来表示结构化数据,这些数据被称为“文档”,并以文档的集合形式进行管理,称为“集合”。
与传统的关系型数据库管理系统不同,它不是将数据存储在表中,而是以类似于关联数组的形式保存。
※有关 MongoDB 的其他术语和机制,请参阅维基百科。
创造
为了在Node.js中操作MongoDB,我们使用一个叫做mongoose的库。
安装
$ npm install mongoose
数据库架构定义
本次我們將創建一個ToDo清單並按照以下方式設定架構。
var Schema = mongoose.Schema;
var todoSchema = new Schema({
tf: {
type: Boolean,
default: false
},
content: String,
createdDate: {
type: Date,
default: Date.now
},
limitDate: Date
});
var todoList = new Schema({
listName: String,
createdDate: {
type: Date,
default: Date.now
},
details: [todoSchema]
});
mongoose.model('Todo', todoList);
MongoDB拥有一种名为嵌入式文档(Embedded Document)的概念,即在文档中嵌入其他文档。
在上面的sampleSchema.js文件中,我们可以通过以下方式进行解释:
在定义todoList模式时,将todoSchema保存为名为details的字段的值。通过这样做,将得到下面所示的ToDo列表数据结构。
-
- ToDoリスト
ToDoリスト名
ToDoリスト作成日
詳細
ToDo1
チェック
内容
ToDo作成日
期限
ToDo2
チェック
内容
ToDo作成日
期限
如果在这里不进行嵌入文档,数据库将变成简单的数据列表,就像第一正规形一样,以后要进行查找时将需要多个查询语句,所以请注意。
添加文件
在mongoose中有一个名为save的方法。
var Todo = mongoose.model('Todo');
var todo = new Todo();
todo.listName = 'リスト名';
todo.save();
像上面的sampleMethod.js一样,我们可以通过创建模型并使用save方法来存储,并且还会自动分配ID。
如何将新的文档添加到现有文档中?
var Todo = mongoose.model('Todo');
Todo.findOne({query},
function (err, todos) {
var todo = {};
todo.tf = false;
todo.content = '内容';
todo.limitDate = limit;
todo.createdDate = Date.now();
todos.details.push(todo);
todos.save(function (err) {
// ...
});
});
在文档中搜索收藏品。
↓
创建一个数组。
↓
将创建的数组添加到文档中。
您可以使用这种方法进行添加。由于此方法会自动分配ID,因此非常方便。
搜索
我遇到了两个问题:第一个是在搜索方面,第二个是在根据客户的审核来改变true/false时。
Todo.findOneAndUpdate({query}
$set: {
'details.$.tf': true/false
},
function (err, todos) {
// ...
});
直到到达[$]位置之前花费了最多的时间。参考1 参考2
如果你想搜索ToDo和ToDo列表的话
Todo.find({
$or: [{
listName: new RegExp('.*' + '検索名' + '.*', 'i')
},
{
'details.content': new RegExp('.*' + '検索名' + '.*', 'i')
}
]
}, function (err, todos) {
// ...
});
MongoDB有一个特点,就是可以在搜索时使用正则表达式搜索,所以我们可以使用RegExp。可以对字符串(搜索名称)进行全文搜索。这是一个不使用[$]的方法。很难。
结束时
很抱歉在後半部分變得有點隨意。在NoSQL中,MongoDB的庫非常豐富,所以我覺得它很適合安裝。我建議有興趣的人可以試試看。非常感謝您的觀看直到最後。
请参考以下网站。
使用Node.js访问MongoDB(介绍Mongoose)- KrdLab的博客