匹配查询
查询操作符
术语 |
描述 |
field |
对文档中的某个属性值进行比较操作 |
operator |
比较操作符 |
value |
查询值 |
比较操作符 |
描述 |
$eq: |
匹配字段值相等的文档 |
$ne: |
匹配字段值不等的文档 |
$gt: |
匹配字段值大于查询值的文档 |
$gte: |
匹配字段值大于或者等于查询值的文档 |
$lt: |
匹配字段值小于查询值的文档 |
$lte: |
匹配字段值小于或者等于查询值的文档 |
$in: |
匹配字段值与任一查询值相等的文档 |
$nin: |
匹配字段值与任意查询值都不等的文档 |
$not: |
匹配不包含指定查询值的逻辑的文档 |
$and: |
匹配多个条件筛选出的文档 |
$or: |
匹配至少符合一个查询值条件的文档 |
$nor: |
匹配都不等于查询值条件的文档 |
$exists: |
匹配包含查询字段的文档 |
$type: |
匹配字段类型符合查询值的文档 |
{ <field>: { ${operator>: <value> } }
db.collection.find()
术语 |
描述 |
query |
读取操作时筛选文档的条件,跟MySQL的where条件类似 |
projection |
对读取结果进行的投射,跟MySQL的select类似 |
db.<collection>.find(
<query>,
<projection>
)
## 查询集合中所有数据
>>> db.accounts.find()
## 可以加入pretty来格式化查询数据
>>> db.accounts.find().pretty()
查询accounts中name为baidu的文档信息
db.accounts.find({name: "baidu"}).pretty()
查询accounts中id为5f53537bac17c4c6104aa990和name为google的文档信息
db.accounts.find
(
{_id: ObjectId("5f53537bac17c4c6104aa990"),name: "google"}
).pretty()
插入复合主键
db.accounts.insert({_id: {type: "save",name: "存款"},balance: 800})
对复合主键进行筛选
db.accounts.find({"_id.type": "save"}).pretty()
查询账户余额大于500的文档信息
db.accounts.find( { balance: {$gt: 500 } } ).pretty()
查询名字不等于baidu的文档信息
db.accounts.find( { name: {$ne: "baidu"} } ).pretty()
查询type不等于baidu的文档信息,这里注意,文档中无type字段的文档数据也会返回,而不是像关系型数据库一样提示某某字段不存在,mongo中不会这样
db.accounts.find( { name: {$ne: "baidu"} } ).pretty()
查询name排在baidu之后的文档信息,按字母排序
db.accounts.find( { name: { $gt: "baidu" } } ).pretty()
查询name为curry和james的文档信息
db.accounts.find( { name: { $in: ["curry","james"] } } ).pretty()
查询name为james且age=23岁的文档信息
db.accounts.find({
$and : [
{ name: { $eq: "james"} },
{ age: { $eq: 23 } }
]
}).pretty()
当查询条件应用在不同的字段上时,可以省略$and操作符
db.accounts.find( {
name: { $eq: "james"},
age: { $eq: 23}
} )
查询age大于10小于50的文档信息
db.accounts.find( { age: { $gt: 10, $lt: 50 } } )
查询name为james或者curry的文档信息,注意,这里可以使用in进行代替,效果相同
db.accounts.find(
{
$or: [
{name: "james"},
{name: "curry"}
]
}
).pretty()
查询name既不是curry也不是westborks且success不为false的文档信息
db.accounts.find(
{
$nor: [
{ name: "curry" },
{ name: "westborks" },
{ success: false }
]
}
)
读取包含name属性的文档
db.accounts.find( { name: { $exists: true} } )
使用exists提升ne等非逻辑所来带的查询准确性,这样一来,没有name这个字段的文档就不会被返回了
db.accounts.find( { name: {$ne: "baidu", $exists: true } } ).pretty()
读取文档主键数据类型是字符串的文档
db.accounts.find( { _id: { $type: "string" } } ).pretty()
$type支持数组作为参数
db.accounts.find( { _id: { $type: ["string","objectId"] } } ).pretty()
$type支持null进行查询
db.accounts.find( { name: { $type: "null" } } ).pretty()
$type支持使用对应的BSON类型序号作为参数,这里演示的2为string
db.accounts.find( { _id: { $type: 2 } } ).pretty()
网友评论