蒙古手册
#javascript #node #mongodb #mongoose

Mongoose是一个流行的JavaScript库,该库与NOSQL数据库MongoDB一起使用。它提供了一种从Node.js应用程序与MongoDB互动的优雅和用户友好的方式。 Mongoose提供了几个关键好处:

  1. 基于架构的建模:Mongoose允许您为MongoDB集合定义数据模式,执行数据结构和验证。这确保了数据一致性和完整性。

  2. 易于数据操作:通过提供直观的方法来创建,读取,更新,删除文档。

  3. 来简化CRUD操作。
  4. 验证:Mongoose提供内置验证功能,使您可以定义数据验证规则,以确保仅存储有效的数据。

  5. 中间件:您可以定义中间件功能以在特定操作之前或之后执行自定义逻辑,例如保存或查询数据。

  6. 查询构建:Mongoose提供了一个强大的查询构建器,并支持过滤,分类和分页,从而更容易构造复杂的数据库查询。

  7. 人口:蒙古简化了数据参考和人口,使您可以从单个查询中的其他收藏集中检索相关数据。

  8. 中间件支持:它支持中间件功能在文档验证,保存和其他操作期间执行自定义逻辑。

  9. 插件:Mongoose提供了一个插件系统,可让您轻松扩展其功能并在项目中重复使用代码。

总的来说,猫鼬的流线杂志互动,使其成为node.js开发人员的流行选择。它提高了发展效率并确保基于mongoDB的应用程序中的数据一致性和验证。


这是一些简单CRUD操作的示例查询:

插入文档:
创建并将新文档插入MongoDB集合中。

   const newBook = new Book({ title: "'Sample Book', author: 'John Doe' });"
   newBook.save();

找到所有文档:
从集合中检索所有文档。

   const allBooks = await Book.find();

查找条件的文档:
检索与特定条件相匹配的文档。

   const fantasyBooks = await Book.find({ genre: 'Fantasy' });

找到一个文档:
根据条件检索单个文档。

   const book = await Book.findOne({ title: "'Sample Book' });"

更新文档:
更新文档的字段。

   await Book.updateOne({ title: "'Sample Book' }, { $set: { genre: 'Science Fiction' } });"

删除文档:
根据条件删除文档。

   await Book.deleteOne({ title: "'Sample Book' });"

汇总数据:
使用聚合管道执行数据聚合操作。

   const result = await Book.aggregate([
     { $match: { genre: 'Science Fiction' } },
     { $group: { _id: '$author', totalBooks: { $sum: 1 } } }
   ]);

排序文档:
根据字段对文档进行排序。

   const sortedBooks = await Book.find().sort({ title: "1 }); // Ascending order"

限制和跳过结果:
限制返回的文档数量并跳过一些结果。

   const page1 = await Book.find().skip(0).limit(10); // First 10 documents
   const page2 = await Book.find().skip(10).limit(10); // Next 10 documents

填充参考:
填充文档,带有来自其他收藏的参考文献。

    const user = await User.findOne().populate('books'); // Assuming 'books' is a reference field

示例用于构建搜索API的Mongoose查询:

基本文本搜索:
搜索字段中包含特定文本的文档。

   const searchQuery = 'apple';
   const results = await Product.find({ $text: { $search: searchQuery } });

案例不敏感的搜索:
执行不敏感的文本搜索。

   const searchQuery = 'apple';
   const results = await Product.find({
     productName: { $regex: new RegExp(searchQuery, 'i') }
   });

通过多个条件进行搜索:
使用$and$or操作员组合多个搜索条件。

   const searchQuery1 = 'apple';
   const searchQuery2 = 'red';
   const results = await Product.find({
     $or: [
       { productName: { $regex: new RegExp(searchQuery1, 'i') } },
       { color: { $regex: new RegExp(searchQuery2, 'i') } }
     ]
   });

按日期搜索:
在特定日期范围内搜索文档。

   const startDate = new Date('2023-01-01');
   const endDate = new Date('2023-12-31');
   const results = await Event.find({
     eventDate: { $gte: startDate, $lte: endDate }
   });

部分匹配搜索:
搜索字段部分匹配搜索查询的文档。

   const searchQuery = 'app';
   const results = await Product.find({
     productName: { $regex: new RegExp(searchQuery, 'i') }
   });

与分页搜索:
实施分页以进行搜索结果。

   const page = 1;
   const perPage = 10;
   const skip = (page - 1) * perPage;
   const results = await Product.find({}).skip(skip).limit(perPage);

排序搜索结果:
根据字段对搜索结果进行排序。

   const sortBy = 'price'; // Field to sort by
   const sortOrder = 'asc'; // 'asc' or 'desc'
   const results = await Product.find({}).sort({ [sortBy]: sortOrder });

使用全文索引和加权搜索:
对某些字段进行加权进行全文搜索。

   const searchQuery = 'apple';
   const results = await Product.find({
     $text: { $search: searchQuery },
     $meta: { $textScore: { $gte: 1 } }
   }).sort({ score: { $meta: 'textScore' } });

通过数组元素搜索:
搜索在数组字段中包含特定元素的文档。

   const searchQuery = 'red';
   const results = await Product.find({ colors: searchQuery });

搜索正则表达式:
搜索使用正则表达式匹配字段的文档。

    const searchQuery = '^abc';
    const results = await Product.find({ productName: { $regex: searchQuery } });

样品杂种汇总查询以执行复杂的数据转换和计算:

组和计数文档:
通过字段进行组文档并计算出事件。

   const result = await Order.aggregate([
     { $group: { _id: '$product', count: { $sum: 1 } } }
   ]);

计算平均值:
计算数字字段的平均值。

   const result = await Product.aggregate([
     { $group: { _id: null, avgPrice: { $avg: '$price' } } }
   ]);

过滤器和组:
过滤文档,然后将它们分组。

   const result = await Transaction.aggregate([
     { $match: { status: 'completed' } },
     { $group: { _id: '$product', total: { $sum: '$amount' } } }
   ]);

排序和限制:
对文档进行排序并限制结果集。

   const result = await Product.aggregate([
     { $sort: { price: -1 } },
     { $limit: 5 }
   ]);

放松阵列:
放开一个数组字段,为每个数组元素创建单独的文档。

   const result = await Order.aggregate([
     { $unwind: '$items' }
   ]);

项目特定字段:
要在结果中包括项目特定字段。

   const result = await User.aggregate([
     { $project: { name: 1, email: 1 } }
   ]);

查找和填充:
执行查找操作以加入另一个集合的数据。

   const result = await Order.aggregate([
     {
       $lookup: {
         from: 'products',
         localField: 'productId',
         foreignField: '_id',
         as: 'product'
       }
     }
   ]);

日期聚合:
按日期提取和分组数据。

   const result = await Log.aggregate([
     {
       $group: {
         _id: { $dateToString: { format: '%Y-%m-%d', date: '$timestamp' } },
         count: { $sum: 1 }
       }
     }
   ]);

有条件汇总:
基于场值执行条件聚合。

   const result = await Sales.aggregate([
     {
       $group: {
         _id: '$product',
         totalSales: {
           $sum: {
             $cond: [{ $eq: ['$status', 'sold'] }, '$quantity', 0]
           }
         }
       }
     }
   ]);

铲斗数据:
将数据数据存入预定义的范围。

    const result = await Product.aggregate([
      {
        $bucket: {
          groupBy: '$price',
          boundaries: [0, 100, 200, 300],
          default: 'Other',
          output: {
            count: { $sum: 1 },
            avgPrice: { $avg: '$price' }
          }
        }
      }
    ]);