Rumah pangkalan data tutorial mysql MongoDB的常用Query操作的介绍(附代码)

MongoDB的常用Query操作的介绍(附代码)

Mar 23, 2019 pm 04:39 PM
mongodb

本篇文章给大家带来的内容是关于MongoDB的常用Query操作的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

前言:使用的可视化工具是 Studio 3T,官网-->https://studio3t.com/
版本号:MongoDB shell version v3.4.2
如何使用:https://blog.csdn.net/weixin_...
看点:重点看操作符那块。
如何查找:在此页面按 ctrl+F 输入关键字查找

一、常用Query
为方便操作,在插入原数据前,先删除所有文档(在项目中请谨慎操作!):

db.getCollection("inventory").deleteMany({})
Salin selepas log masuk

0、查看所有文档

db.getCollection("inventory").find({})
Salin selepas log masuk

1、对象查找
1.1、原数据

db.inventory.insertMany( [
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
Salin selepas log masuk
Salin selepas log masuk

1.2、查找 size.h 等于 14,size.w 等于 21,size.uom 等于 cm 的文档

db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
Salin selepas log masuk

1.3、查找 size.uom 等于 in 的文档

db.inventory.find( { "size.uom": "in" } )
Salin selepas log masuk

注意:当查找单个对象属性时,务必加上引号!

1.4、查找并返回对象里的指定字段

db.inventory.find(
   { status: "A" },
   { item: 1, status: 1, "size.uom": 1 }
)
Salin selepas log masuk

1.5、查找并过滤对象里的指定字段

db.inventory.find(
   { status: "A" },
   { "size.uom": 0 }
)
Salin selepas log masuk

2、数组查找
2.1、原数据

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2.2、查找 tags=["red", "blank"] 的文档

db.inventory.find( { tags: ["red", "blank"] } )
Salin selepas log masuk

注意:不是包含关系,即 tags: ["red", "blank", "plain"] 是不包括在内的

2.3、查找 tags 包含 red 的文档

db.inventory.find( { tags: "red" } )
Salin selepas log masuk

注意:不能这么写 db.inventory.find( { tags: ["red"] } ),这样就表示查找 tags 是 red 的文档

3、数组中包含对象的查找
3.1、原数据

db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

3.2、查找数组中有一个对象符合条件的(不是包含),只要数组中有一个对象符合条件就返回整个数组

db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
Salin selepas log masuk

要严格按照字段的顺序来,如果调换字段顺序会 找 不 到,如下:

db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
Salin selepas log masuk

3.3、查找数组中的元素对象,有一个元素对象的qty=5,或者该对象(或者是其他元素对象)的warehouse=A

db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
Salin selepas log masuk

3.4、查找数组中的对象,并返回对象的某个属性

db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
Salin selepas log masuk

4、普通查找
4.1、原数据

db.inventory.insertMany( [
  { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
  { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
  { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
  { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
  { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
Salin selepas log masuk

4.2、查询并返回指定字段
在 status=A 的条件下,返回 _id,item,status 字段

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
Salin selepas log masuk

结果:

{ "_id" : ObjectId("5c91cd53e98d5972748780e1"), 
    "item" : "journal", 
    "status" : "A"}
// ----------------------------------------------
{ "_id" : ObjectId("5c91cd53e98d5972748780e2"), 
    "item" : "notebook", 
    "status" : "A"}
// ----------------------------------------------
{ "_id" : ObjectId("5c91cd53e98d5972748780e5"), 
    "item" : "postcard", 
    "status" : "A"}
Salin selepas log masuk

4.3、由 4.2 可知,_id 是自动带着的,可以去掉,如下
查询不带(去掉) id :

db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
Salin selepas log masuk

注意:除了 id 可以在过滤掉的同时,还去保留其他字段外,其他字段不能在 0 的同时,还写 1
如:

db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
Salin selepas log masuk

会报错

5518628-9f9c494930a74ccc.png

4.4、排除特定字段,返回其他字段

db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
Salin selepas log masuk

5、查找 null 或不存在的 键
5.1、原数据

db.inventory.insertMany([
   { _id: 1, item: null },
   { _id: 2 }
])
Salin selepas log masuk
Salin selepas log masuk

5.2、查找 item 为 null 的文档,或者不包含 item 的文档

db.inventory.find( { item: null } )
Salin selepas log masuk

二、操作符
1、$lt  less than 小于
1.1、原数据

db.inventory.insertMany( [
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
Salin selepas log masuk
Salin selepas log masuk

1.2、查找 "size.h" 小于 15 的文档集合

db.inventory.find( { "size.h": { $lt: 15 } } )
Salin selepas log masuk

1.3、$lt 与 AND 联用
查找 size.h 小于 15,并且 size.uom 是 in ,并且 status 是 D 的文档

db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
Salin selepas log masuk

2、$lte less than equal 小于等于
2.1、原数据

db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

2.2、查找 instock.qty 小于等于 20 的文档,只要数组中有一个对象符合条件就返回整个数组

db.inventory.find( { 'instock.qty': { $lte: 20 } } )
Salin selepas log masuk

3、$gt greater than 大于
3.1、原数据

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

3.2、查找 dim_cm 大于 25 的文档

db.inventory.find( { dim_cm: { $gt: 25 } } )
Salin selepas log masuk

注意:只要包含大于 25 的元素的数组,都是符合条件的

3.3、查找 dim_cm 大于 15,或小于 20,或既大于 15,又小于 20 的文档

db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
Salin selepas log masuk

3.4、查找 dim_cm 既大于 22,又小于 30 的文档(是判断数组的某一个元素是否是大于22,且小于30的,而不是判断数组的所有元素)

db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
Salin selepas log masuk

3.5、根据数组位置查找
查找 dim_cm 的第二个元素 大于 25 的文档

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
Salin selepas log masuk

4、$size 根据数组长度查找
查找 tags 长度是 3 的文档

db.inventory.find( { "tags": { $size: 3 } } )
Salin selepas log masuk

5、$gte 大于等于
5.1、原数据

db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

5.2、查找数组的第一个元素(对象)的qty 大于等于 20 的文档集合

db.inventory.find( { 'instock.0.qty': { $gte: 20 } } )
Salin selepas log masuk

6、$elemMatch 对象的属性匹配
6.1、在数组中查找符合 qty=5, warehouse="A" 的对象,并返回该文档集合

db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
Salin selepas log masuk

6.2、在数组中查找符合 qty 大于 10 并且小于等于 20 的文档集合

db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
Salin selepas log masuk

如果不使用 $elemMatch 的话,就表示 qty 大于 10 或者小于等于 20,官方文档意思是,不在数组的某一个元素找 既满足条件 A 又满足条件 B 的 qty,而是在数组的所有元素上找,满足条件 A 或满足条件 B 的 qty

db.inventory.find( { "instock.qty": { $gt: 10,  $lte: 20 } } )
Salin selepas log masuk

7、$slice 返回数组特定位置的元素
7.1、原数据

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

7.2、查找并返回 tags 数组的最后一个元素

db.inventory.find( { item: "journal" }, { item: 1, qty: 0, tags: { $slice: -1 } } )
Salin selepas log masuk

结果:

{ 
    "_id" : ObjectId("5c91dce5e98d5972748780e6"), 
    "item" : "journal", 
    "tags" : [
        "red"
    ]
}
Salin selepas log masuk

8、$type 返回指定类型的元素
8.1、原数据

db.inventory.insertMany([
   { _id: 1, item: null },
   { _id: 2 }
])
Salin selepas log masuk
Salin selepas log masuk

8.2、返回 null 类型的数据

db.inventory.find( { item : { $type: 10 } } )
Salin selepas log masuk

类型如下:

5518628-977fce936fee345b.png

详细文档请看:https://docs.mongodb.com/manu...

9、$exists 返回存在/不存在的键
查找不存在 item 键的数据

db.inventory.find( { item : { $exists: false } } )
Salin selepas log masuk

10、$all 包含
10.1、原数据

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

10.2、查找 tags 数组包含 ["red", "blank"] 的文档

db.inventory.find( { tags: { $all: ["red", "blank"] } } )
Salin selepas log masuk

综上:
数组用的:$all$size$slice
对象用的:$elemMatch

Query查询的详细文档请看:https://docs.mongodb.com/manu...
Operator的详细文档请看:https://docs.mongodb.com/manu...

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的mongodb视频教程栏目!

Atas ialah kandungan terperinci MongoDB的常用Query操作的介绍(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kegunaan net4.0 Apakah kegunaan net4.0 May 10, 2024 am 01:09 AM

.NET 4.0 digunakan untuk mencipta pelbagai aplikasi dan ia menyediakan pemaju aplikasi dengan ciri yang kaya termasuk: pengaturcaraan berorientasikan objek, fleksibiliti, seni bina berkuasa, penyepaduan pengkomputeran awan, pengoptimuman prestasi, perpustakaan yang luas, keselamatan, Kebolehskalaan, akses data dan mudah alih sokongan pembangunan.

Cara mengkonfigurasi pengembangan automatik MongoDB pada Debian Cara mengkonfigurasi pengembangan automatik MongoDB pada Debian Apr 02, 2025 am 07:36 AM

Artikel ini memperkenalkan cara mengkonfigurasi MongoDB pada sistem Debian untuk mencapai pengembangan automatik. Langkah -langkah utama termasuk menubuhkan set replika MongoDB dan pemantauan ruang cakera. 1. Pemasangan MongoDB Pertama, pastikan MongoDB dipasang pada sistem Debian. Pasang menggunakan arahan berikut: SudoaptDateSudoaptInstall-ImongoDB-Org 2. Mengkonfigurasi set replika replika MongoDB MongoDB Set memastikan ketersediaan dan kelebihan data yang tinggi, yang merupakan asas untuk mencapai pengembangan kapasiti automatik. Mula MongoDB Service: sudosystemctlstartmongodsudosys

Cara Memastikan Ketersediaan MongoDB Tinggi di Debian Cara Memastikan Ketersediaan MongoDB Tinggi di Debian Apr 02, 2025 am 07:21 AM

Artikel ini menerangkan cara membina pangkalan data MongoDB yang sangat tersedia pada sistem Debian. Kami akan meneroka pelbagai cara untuk memastikan keselamatan data dan perkhidmatan terus beroperasi. Strategi Utama: Replicaset: Replicaset: Gunakan replika untuk mencapai redundansi data dan failover automatik. Apabila nod induk gagal, set replika secara automatik akan memilih nod induk baru untuk memastikan ketersediaan perkhidmatan yang berterusan. Sandaran dan Pemulihan Data: Secara kerap Gunakan perintah Mongodump untuk membuat sandaran pangkalan data dan merumuskan strategi pemulihan yang berkesan untuk menangani risiko kehilangan data. Pemantauan dan penggera: Menyebarkan alat pemantauan (seperti Prometheus, Grafana) untuk memantau status MongoDB dalam masa nyata, dan

Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Apr 08, 2025 pm 09:39 PM

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Kemas kini utama Pi Coin: Pi Bank akan datang! Kemas kini utama Pi Coin: Pi Bank akan datang! Mar 03, 2025 pm 06:18 PM

Pinetwork akan melancarkan Pibank, platform perbankan mudah alih revolusioner! Pinetwork hari ini mengeluarkan kemas kini utama mengenai Pimisrbank Elmahrosa (muka), yang disebut sebagai Pibank, yang mengintegrasikan dengan baik perkhidmatan perbankan tradisi C). Apakah pesona Pibank? Mari kita cari! Fungsi utama Pibank: Pengurusan sehenti akaun bank dan aset cryptocurrency. Menyokong urus niaga masa nyata dan mengamalkan biospesies

Apakah strategi sandaran CentOS MongoDB? Apakah strategi sandaran CentOS MongoDB? Apr 14, 2025 pm 04:51 PM

Penjelasan terperinci mengenai strategi sandaran yang cekap MongoDB di bawah sistem CentOS Artikel ini akan memperkenalkan secara terperinci pelbagai strategi untuk melaksanakan sandaran MongoDB pada sistem CentOS untuk memastikan kesinambungan data dan kesinambungan perniagaan. Kami akan merangkumi sandaran manual, sandaran masa, sandaran skrip automatik, dan kaedah sandaran dalam persekitaran kontena Docker, dan menyediakan amalan terbaik untuk pengurusan fail sandaran. Sandaran Manual: Gunakan perintah Mongodump untuk melakukan sandaran penuh manual, contohnya: Mongodump-Hlocalhost: 27017-U Pengguna-P Password-D Database Data-O/Backup Direktori Perintah ini akan mengeksport data dan metadata pangkalan data yang ditentukan ke direktori sandaran yang ditentukan.

Cara Menyulitkan Data dalam Debian Mongodb Cara Menyulitkan Data dalam Debian Mongodb Apr 12, 2025 pm 08:03 PM

Menyulitkan pangkalan data MongoDB pada sistem Debian memerlukan langkah berikut: Langkah 1: Pasang MongoDB terlebih dahulu, pastikan sistem Debian anda dipasang MongoDB. Jika tidak, sila rujuk kepada dokumen MongoDB rasmi untuk pemasangan: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/step 2: menghasilkan fail kunci penyulitan Buat fail yang mengandungi kunci penyulitan dan tetapkan kebenaran yang betul:

Cara menyusun indeks mongoDB Cara menyusun indeks mongoDB Apr 12, 2025 am 08:45 AM

Indeks Penyortiran adalah sejenis indeks MongoDB yang membolehkan dokumen menyusun dalam koleksi oleh medan tertentu. Mewujudkan indeks jenis membolehkan anda menyusun hasil pertanyaan dengan cepat tanpa operasi penyortiran tambahan. Kelebihan termasuk penyortiran cepat, menimpa pertanyaan, dan penyortiran atas permintaan. Sintaks adalah db.collection.createIndex ({field: & lt; sort order & gt;}), di mana & lt; sort order & gt; adalah 1 (urutan menaik) atau -1 (perintah menurun). Anda juga boleh membuat indeks penyortiran berbilang bidang yang menyusun pelbagai bidang.

See all articles