mongoDB

MongoDB读取文档之比较操作符

2020-09-13  本文已影响0人  AbstractCulture

匹配查询

查询操作符

术语 描述
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()
上一篇 下一篇

猜你喜欢

热点阅读