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的博客

广告
将在 10 秒后关闭
bannerAds