龙空技术网

常用的MongoDB操作符及其用法

老菜鸟程序员 182

前言:

目前小伙伴们对“js正则表达式替换模糊匹配的字符串”都比较关注,咱们都想要学习一些“js正则表达式替换模糊匹配的字符串”的相关知识。那么小编也在网摘上收集了一些对于“js正则表达式替换模糊匹配的字符串””的相关文章,希望同学们能喜欢,小伙伴们快快来了解一下吧!

查询操作符$eq: 匹配与指定值相等的文档。

db.collection.find({ field: { $eq: value } })
$ne: 匹配与指定值不相等的文档。
db.collection.find({ field: { $ne: value } })
$in: 匹配与指定数组中任何值相等的文档。
db.collection.find({ field: { $in: [value1, value2, ...] } })
$gt: 匹配指定值大于字段的文档。
db.collection.find({ field: { $gt: value } })
$gte: 匹配指定值大于或等于字段的文档。
db.collection.find({ field: { $gte: value } })
$lt: 匹配指定值小于字段的文档。
db.collection.find({ field: { $lt: value } })
$lte: 匹配指定值小于或等于字段的文档。
db.collection.find({ field: { $lte: value } })
更新操作符$set: 设置字段的值。
db.collection.update({ _id: ObjectId("...") }, { $set: { field: value } })
$inc: 将字段的值增加指定的数值。
db.collection.update({ _id: ObjectId("...") }, { $inc: { field: value } })
$unset: 删除指定字段。
db.collection.update({ _id: ObjectId("...") }, { $unset: { field: 1 } })
$push: 将值添加到数组字段中。
db.collection.update({ _id: ObjectId("...") }, { $push: { field: value } })
$addToSet: 将值添加到数组字段中,如果值已经存在则不会重复添加。
db.collection.update({ _id: ObjectId("...") }, { $addToSet: { field: value } })
删除操作符$deleteMany: 删除所有符合条件的文档。
db.collection.deleteMany({ field: value })
$deleteOne: 删除符合条件的第一个文档。
db.collection.deleteOne({ field: value })
聚合操作符$group: 将文档分组。
db.collection.aggregate([ { $group: { _id: "$field", count: { $sum: 1 } } } ])
$match: 过滤文档。
db.collection.aggregate([ { $match: { field: value } } ])
$project: 显示或隐藏字段。
db.collection.aggregate([ { $project: { _id: 0, field1: 1, field2: 1 } } ])
$sort: 排序文档。
db.collection.aggregate([ { $sort: { field: 1 } } ])
$limit: 限制返回文档的数量。
db.collection.aggregate([ { $limit: 10 } ])

以上仅是一些常用的操作符,MongoDB还有很多。

下面是复杂一点的用法:

$lookup 操作用于在一个集合中查找与另一个集合中的文档相关联的文档。例如,如果一个集合中的文档包含对另一个集合中文档的引用,那么可以使用 $lookup 操作来将两个集合中相关的文档合并在一起。 $lookup 操作可以用于实现 SQL 中的 JOIN 操作。

以下是 $lookup 操作的示例:

db.orders.aggregate([ { $lookup: { from: "products", localField: "product_id",foreignField: "_id", as: "product_info" } } ])

上述示例中,$lookup 操作将 orders 集合中的每个文档的 product_id 字段与 products 集合中的 _id 字段进行比较,并将匹配的文档添加到结果集中。

search 操作用于在文本字段中搜索指定的文本。 MongoDB 提供了全文本搜索(Full Text Search)功能,可以用于执行类似于 Google 搜索的操作,如搜索关键字,短语,近似词等。为了使用全文本搜索,必须在创建索引时启用全文本搜索索引。

以下是 search 操作的示例:

db.articles.find({ $text: { $search: "mongodb tutorial" } })

上述示例中,$text 操作用于执行全文本搜索,$search 操作用于指定要搜索的文本。在此示例中,将搜索包含“mongodb”和“tutorial”这两个单词的所有文档。

在 MongoDB 中,可以使用 $regex 操作符来执行模糊查询。$regex 操作符可以接受一个正则表达式作为参数,用于匹配集合中的字段值。

以下是在上述 Mongoose 模式中模糊查询 title 字段的示例:

const regex = new RegExp("查询关键字", "i"); // i 表示不区分大小写 const result = awaitpracticeModel.find({ title: { $regex: regex } });

在上面的示例中,我们首先使用 JavaScript 的 RegExp 对象创建一个正则表达式,然后将其传递给 MongoDB 的 $regex 操作符。查询关键字应该替换为你想要查询的文本。

在查询中,我们将 $regex 操作符作为 title 字段的值传递给 find() 方法。这将返回所有匹配正则表达式的文档,其中 i 表示不区分大小写。

注意,使用正则表达式进行模糊查询可能会影响性能,特别是在大型数据集中。为了优化查询性能,可以使用文本搜索功能。要使用文本搜索功能,必须为集合中的字段创建全文本索引。

在 MongoDB 中,可以使用 $lookup 操作符来将两个或多个集合中的文档进行关联查询。如果要在 $lookup 操作中执行文本搜索,可以先使用 $match 操作符将查询条件传递给搜索操作,然后再使用 $lookup 操作符执行关联查询。

以下是在 $lookup 操作中使用文本搜索的示例:

假设我们有两个集合:articles 和 comments。articles 集合包含文章标题和内容字段,comments 集合包含评论内容和关联的文章 ID 字段。我们希望在文章标题和评论内容中搜索包含特定关键字的文档,并且在搜索结果中包含评论和关联的文章信息。

首先,我们需要在 articles 集合和 comments 集合中分别创建全文本索引:

db.articles.createIndex({ title: "text", content: "text" }); db.comments.createIndex({ text: "text" });

接下来,我们可以使用 $match 操作符执行文本搜索,并将搜索结果传递给 $lookup 操作符执行关联查询。以下是完整的示例代码:

db.articles.aggregate([ { $match: { $text: { $search: "mongodb" } } }, { $lookup: {from: "comments", let: { article_id: "$_id" }, pipeline: [ { $match: { $text: {$search: "mongodb" }, $expr: { $eq: ["$articleId", "$$article_id"] } } }, { $limit: 5 } ], as: "comments" } } ])

在上面的代码中,我们首先使用 $match 操作符执行文本搜索,搜索条件为包含 "mongodb" 关键字的文档。然后,我们使用 $lookup 操作符将 comments 集合中的文档关联到搜索结果中的每个文章文档中。我们使用 let 关键字定义了一个变量 article_id,它的值为当前搜索结果中的 _id 字段。然后,在 $lookup 操作符的 pipeline 中,我们使用 $match 操作符执行文本搜索,搜索条件为包含 "mongodb" 关键字的文档,并且通过 $expr 操作符将 articleId 字段与 article_id 变量进行比较,找到与当前文章相关的评论。最后,我们使用 $limit 操作符限制返回的评论数量为 5 条。最终的查询结果将包含搜索结果中的每个文章文档,以及与之关联的评论信息。

标签: #js正则表达式替换模糊匹配的字符串