【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…


背景介绍

Mongodb compaas id查询 mongodb in查询_java

我们以商品信息为案例存储在MongoDB数据库,数据结构如下,带大家学习基础的查询语法

Mongodb compaas id查询 mongodb in查询_mongodb_02

数据模型解释

解释一下(product)模型各个字段的含义

  • _id 字段:这是文档的唯一标识符。
  • name 字段:这是产品的名称。
  • description 字段:这是产品的简短说明或描述。
  • price 字段:这是产品的价格。
  • category 字段:这是产品所属的分类或种类。
  • imageURL 字段:这是指向产品图片链接的URI。
  • variants 字段:这是一个内嵌文档,其中包含产品的不同版本或选项。
  • colorsAndSizes 字段:这是一个数组,其中包含多个选项的颜色和尺寸。
  • brand 字段:这也是一个内嵌文档,包含品牌的详细信息。
  • ratings 字段:这是一个数组,其中包含产品收到的评价。
  • numReviews 字段:这是产品获得的总评价数量。
  • dateAdded 字段:这是产品添加到数据库的时间。
  • {_id:ObjectId(“your_object_id”)}:这是一个特殊的文档ID。

以上都是 MongoDB 文档的基本组成部分,可以供你参考。这些文档可以根据实际需求调整以满足您的业务需求。


案例学习

1、查询所有产品

db.product.find()

2、查询某个ID的产品

db.product.find({_id:ObjectId("5a934e000102030405000002")})

3、查询name

db.product.find({ name : 'Product 2'})

4、查询类别为电子产品的所有产品

db.product.find( { category : 'Electronics' } )

5、查询价格大于$20的产品

db.product.find({ price : { $gt : 20 } })

6、查询带有“黑色”选项的产品:

db.product.find({ "variants.colorsAndSizes.color": "black" })

7、优化成根据颜色模糊查询

说明:其中 /black/ 是正则表达式模式,表示文本需以"black"开头,并且结束。而 i 是标志位(flag),它告诉MongoDB引擎此模式是大小写不敏感的。

db.product.find({ "variants.colorsAndSizes.color": { $regex: /black/i } })

Mongodb compaas id查询 mongodb in查询_mongodb_03

8、模糊查询

如果您想实现更复杂的,例如只匹配以"b"开始的颜色,请使用

db.product.find({ "variants.colorsAndSizes.color": { $regex: /^b/}})

9、联合查询

查询评级至少为5星且大于等于2条评论的产品

db.product.find({
   ratings : { $elemMatch : { rating : { $gte : 5 }, review : {$exists : true} } }, 
   numReviews : { $gte : 2 }
})

这是一个用于查询至少有两个评价并且平均分大于等于5分的所有产品的MongoDB查询语句。具体而言:

  • ratings字段:指定了要在哪个字段上进行查询。
  • $elemMatch运算符:确定要匹配哪些元素或文档内的子文档符合指定条件,在这种情况下是要筛选评级大于等于5且存在评论的所有评级。
  • { rating : { KaTeX parse error: Expected 'EOF', got '}' at position 9: gte : 5 }̲, review : {exists : true}定义了我们要查找的标准——查询所有评分大于等于5分的产品评级,而且要求评论存在。
  • { numReviews : { $gte : 2 }} 进一步规定产品的总评分数必须大于等于2。 这将返回符合条件的产品列表。

10、查询某个品牌的所有产品

db.product.find({ "brand.name" : 'Brand X' })
db.product.find({ "brand.name" : { $regex: /a/} })
  • db.product.find({ “brand.name” : { $regex: /a/ } })是MongoDB中的一个查询语句,它可以查找到集合中的所有产品,其品牌名称包含"a"这个字符。
  • 其中 “brand.name” 表示我们要搜索的品牌名字段,而 { $regex: /a/ } 是指定MongoDB引擎在给定域中使用正则表达式去匹配所有的匹配项。也就是说,它将在品牌的名称中搜索任意位置包含’a’的文字。

11、查询某个日期之后添加的产品

db.product.find({ dateAdded : { $gte : new Date('your_date') } })

12、查询返回指定字段

根据name 模糊查询,返回指定字段

db.product.find( { name : /^Product/i }, {_id:0, name:1, price:1})

根据category 模糊查询,返回指定字段

db.product.find( { category : /^Clothing/i }, {_id:0, name:1, price:1})

这个查询将查找所有以"Clothing"开头的名字,并且只返回它们的名字和价格。具体而言,MongoDB会搜索满足{category : /^Clothing/i}的文档,也就是匹配category以"Clothing"开头的所有文档,然后再筛选出只有名字和价格的结果,忽略_id和其他字段,返回的数据结构如下:

Mongodb compaas id查询 mongodb in查询_mongodb_04

实测案例:如下几种写法查询结果相同

db.product.find( { category : /^Clothing/i }, {_id:0, name:1, price:1,category:1})
db.product.find( { 'category' : /^Clothing/i }, {_id:0, name:1, price:1,category:1})
db.product.find( { "category" : /^Clothing/i }, {_id:0, name:1, price:1,category:1})
db.product.find( { "category" : /^Clothing/i }, {_id:0, name:1, price:1,"category":1})

Mongodb compaas id查询 mongodb in查询_经验分享_05

13、要查询colorsAndSizes不为空的数据

db.product.find({"variants.colorsAndSizes.0":{$exists:true}})

这条命令会在MongoDB中查找那些拥有variants.colorsAndSizes中非空元素的文档,即使它可能是一个空对象或空数组也包括在内。

这是因为字段存在与否是最重要的标准,并且不考虑其具体内容。同样要注意的是,这个查询也不会返回那些未定义或者不存在variants字段的文档。

db.product.find({"variants.colorsAndSizes.2":{$exists:true}})

这条语句将查询product集合中variants.colorsAndSizes第3个元素存在的所有文档,即使它可能为空。

variants.colorsAndSizes.2是内嵌文档的第三个元素,$exists操作符用来判断该元素是否存在。如果存在,则返回该文档。如果不存在,则不会出现任何结果。这是一种避免查询有大量数据的简便方式,可以迅速缩小搜索范围。

建议仔细检查每个查询是否符合预期,以免意外排除了不应被排除的数据。

Mongodb compaas id查询 mongodb in查询_mongodb_06

14、只想返回数组中的指定的属性

查询有user1评论的商品,并且返回指定字段

db.product.find( { "ratings.user" :"user1" }, {_id:0, name:1, price:1,category:1,ratings:1})

查询结果

{
    "name": "Product 1",
    "price": 9.99,
    "category": "Electronics",
    "ratings": [
        {
            "user": "user1",
            "rating": 5,
            "review": "This product is great!"
        },
        {
            "user": "user2",
            "rating": 3,
            "review": "It's okay."
        }
    ]
}

查询有user1评论的商品,并且返回指定字段【指定数组总返回那些字段】

db.product.find( { "ratings.user" :"user1" }, {_id:0, name:1, price:1,category:1,"ratings.user":1,"ratings.review":1})

查询结果

{
    "name": "Product 1",
    "price": 9.99,
    "category": "Electronics",
    "ratings": [
        {
            "user": "user1",
            "review": "This product is great!"
        },
        {
            "user": "user2",
            "review": "It's okay."
        }
    ]
}

Mongodb compaas id查询 mongodb in查询_spring boot_07

15、关键字in的使用

案例:查询颜色包含蓝色和红色的数据

db.product.find({"variants.colorsAndSizes.color":{"$in":["blue","red"]}})

Mongodb compaas id查询 mongodb in查询_数据库_08

16、关键字nin的使用

db.product.find({"variants.colorsAndSizes.color":{"$nin":["blue","red"]}})

Mongodb compaas id查询 mongodb in查询_经验分享_09

17、关键字in 和 nin结合使用

db.product.find({
    "variants.colorsAndSizes.color": {
        "$nin": ["blue", "red"]
    },
    "variants.colorsAndSizes.size": {
        "$in": ["XS", "XL"]
    }
})

Mongodb compaas id查询 mongodb in查询_java_10

18、关键字or使用

案例:查询 颜色有红色 尺码有XS的数据

db.product.find( { $or: [ { "variants.colorsAndSizes.color": "red" }, { "variants.colorsAndSizes.size":"XS" } ] } )

二选一满足都可以查询出来

Mongodb compaas id查询 mongodb in查询_mongodb_11

19、关键字and使用

案例: 查询商品名称中包含 Product的,类目是"Electronics"的数据

db.product.find( { "name" : /Product/, "category" : "Electronics" })

Mongodb compaas id查询 mongodb in查询_数据库_12

20、正则表达式案例

两种语法都可以

db.product.find({"name": /Product/})
db.product.find({"name":{$regex:"Product"}})

Mongodb compaas id查询 mongodb in查询_经验分享_13


忽略大小写

db.product.find({"category": /e/i})
db.product.find({"category":{$regex:"e",$options:"$i"}})

Mongodb compaas id查询 mongodb in查询_经验分享_14

实战测试脚本

如果大家本地有MongoDB数据库的,可以直接导入如下脚本,希望我的分享对大家初学有帮助,欢迎点赞留言交流!

db.getCollection("product").insert( {
    "_id": ObjectId("5a934e000102030405000000"),
    "name": "Product 1",
    "description": "A description of Product 1",
    "price": 9.99,
    "category": "Electronics",
    "imageURL": "http://example.com/product1.jpg",
    "variants": {
        "colorsAndSizes": [
            { "color": "red", "size": "S" },
            { "color": "blue", "size": "M" },
            { "color": "green", "size": "L" }
        ]
    },
    "brand": {
        "name": "Brand X",
        "url": "http://www.brandx.com"
    },
    "ratings": [
        {
            "user": "user1",
            "rating": 5,
            "review": "This product is great!"
        },
        {
            "user": "user2",
            "rating": 3,
            "review": "It's okay."
        }
    ],
    "numReviews": 2,
    "dateAdded": ISODate("2023-07-01T00:00:00Z")
})


db.getCollection("product").insert({
    "_id": ObjectId("5a934e000102030405000002"),
    "name": "Product 2",
    "description": "A description of Product 2",
    "price": 19.99,
    "category": "Clothing",
    "imageURL": "http://example.com/product2.jpg",
    "variants": {
        "colorsAndSizes": [
            { "color": "black", "size": "XS" },
            { "color": "white", "size": "XL" }
        ]
    },
    "brand": {
        "name": "Brand Y",
        "url": "http://www.brandy.com"
    },
    "ratings": [
        {
            "user": "user3",
            "rating": 4,
            "review": "Good quality clothing!"
        },
        {
            "user": "user4",
            "rating": 2,
            "review": "Runs small, order up one size!"
        }
    ],
    "numReviews": 2,
    "dateAdded": ISODate("2023-07-02T00:00:00Z")
})





db.getCollection("product").insert({
    "_id": ObjectId("5a934e000102030405000003"),
    "name": "Product 3",
    "description": "A description of Product 3",
    "price": 29.99,
    "category": "Home Goods",
    "imageURL": "http://example.com/product3.jpg",
    "variants": {
        "colorsAndSizes": [
            { "color": "beige", "size": "18x18" },
            { "color": "gray", "size": "20x20" }
        ]
    },
    "brand": {
        "name": "Brand Z",
        "url": "http://www.brandz.com"
    },
    "ratings": [
        {
            "user": "user5",
            "rating": 5,
            "review": "High quality pillows! Perfect for my living room."
        },
        {
            "user": "user6",
            "rating": 3,
            "review": "Nice pillows, but arrived with some damage to the packaging."
        }
    ],
    "numReviews": 2,
    "dateAdded": ISODate("2023-07-03T00:00:00Z")
})


db.getCollection("product").insert({
    "_id": ObjectId("5a934e000102030405000004"),
    "name": "Product 4",
    "description": "A description of Product 4",
    "price": 49.99,
    "category": "Books",
    "imageURL": "http://example.com/product4.jpg",
    "variants": {
        "colorsAndSizes": []
    },
    "brand": {
        "name": "Publisher A",
        "url": "http://www.publishera.com"
    },
    "ratings": [
        {
            "user": "user7",
            "rating": 5,
            "review": "Great read! Highly recommend it to anyone interested in this subject matter."
        },
        {
            "user": "user8",
            "rating": 2,
            "review": "Didn't really enjoy it. Found it slow and uninteresting."
        }
    ],
    "numReviews": 2,
    "dateAdded": ISODate("2023-07-04T00:00:00Z")
})


db.getCollection("product").insert({
    "_id": ObjectId("5a934e000102030405000005"),
    "name": "Product 5",
    "description": "A description of Product 5",
    "price": 79.99,
    "category": "Kitchen Appliances",
    "imageURL": "http://example.com/product5.jpg",
    "variants": {
        "colorsAndSizes": [
            { "color": "stainless steel", "size": "large" },
            { "color": "black stainless steel", "size": "medium" }
        ]
    },
    "brand": {
        "name": "Brand B",
        "url": "http://www.brandb.com"
    },
    "ratings": [
        {
            "user": "user9",
            "rating": 4,
            "review": "Works well, does what it says it will do."
        },
        {
            "user": "user10",
            "rating": 3,
            "review": "Decent product, but a bit overpriced for what you get."
        }
    ],
    "numReviews": 2,
    "dateAdded": ISODate("2023-07-05T00:00:00Z")
})