mongoDB的DML操作语句

MongoDB查询更新操作语句命令大全

查询所有数据

SQLSELECT * FROM users
db.users.find()

条件查询

SQLSELECT * FROM users WHERE username= 'Lucy'
db.users.find({"username" : "Lucy"})

条件查询(AND)

SQLSELECT * FROM users WHERE username = "Lucy" AND age = 18
db.users.find({"username" : "Lucy", "age" : 18})

查询特定列

SQLSELECT username, email FROM users
db.users.find({}, {"username" : 1, "email" : 1}) // 只返回`username`, `email`

查询特定列(阻止_id返回)

SQLSELECT username FROM users
db.users.find({}, {"username" : 1, "_id" : 0}) // 阻止`_id`返回:查询特定列,其中MongoDB的`_id`列是默认查询出来的,不管该记录中是否存在`username`这个字段,`userName:1`就是显示该字段,`userName:0`就是不显示该字段,所以要不显示`_id`,就可以加上`_id:0`即可

区间范围查询

SQLSELECT * FROM users WHERE age >=18 AND age <= 30
db.users.find({"age" : {"$gte" : 18, "$lte" : 20}}) // $lt(<) $lte(<=) $gt(>) $gte(>=)

查找username的值不等于Lucy的这个条件的所有字段

SQLSELECT * FROM users WHERE username <> "Lucy"
db.users.find({"username" : {"$ne" : "Lucy"}})

IN

SQLSELECT * FROM users WHERE age IN(18, 20, 22)
db.users.find({"age" : {"$in" : [18, 20, 22]}})

NOT IN

SQLSELECT * FROM users WHERE age NOT IN(18, 20, 22)
db.users.find({"age" : {"$nin" : [18, 20, 22]}})

OR

SQLSELECT * FROM users WHERE age = 18 OR adopt = true
db.users.find({"$or" : [{"age" : 18}, {"adopt" : true}]})

NOT

SQLSELECT * FROM users WHERE NOT(age = 18)
db.users.find({"$not": {"age" : 18}})

如果直接通过find({"username" : null})进行查询,那么连带"没有username"的纪录一并筛选出来

SQLSELECT * FROM users WHERE username IS NULL
db.users.find({"username" : {"$in" : [null], "$exists" : true}})

LIKE模糊查询

SQLSELECT * FROM users WHERE username LIKE "%A%"
db.users.find({"username" : /A/}) // `username`包含`A`字母的数据(`%A%`)

LIKE模糊查询(以x开头)

SQLSELECT * FROM users WHERE username LIKE "A%"
db.users.find({"username" : /^A/}) // `username`以字母A开头的数据(`A%`)

查询结果使用ORDER BY字段ASC排序

SQLSELECT * FROM users WHERE username = "Lucy" ORDER BY _id ASC
db.users.find({"username ": "Lucy"}).sort({_id : 1})

查询结果使用ORDER BY字段DESC排序

SQLSELECT * FROM users WHERE userName ="Lucy" ORDER BY _id DESC
db.users.find({"username ": "Lucy"}).sort({_id : -1})

mongoDB SQL

// 正则查询,value是符合PCRE的表达式
db.users.find({"name" : /joey?/i})
// 对数组的查询, 字段fruit中,既包含"apple",又包含"banana"的纪录
db.users.find({fruit : {$all : ["apple", "banana"]}})
// 对数组的查询, 字段fruit中,第3个(从0开始)元素是peach的纪录
db.users.find({"fruit.2" : "peach"})
// 对数组的查询, 查询数组元素个数是3的记录,$size前面无法和其他的操作符复合使用
db.users.find({"fruit" : {"$size" : 3}})
// 对数组的查询,只返回数组comments中的前十条,还可以`{"$slice" : -10}, {"$slice" : [23, 10]};` 分别返回最后10条,和中间10条
db.users.findOne(criteria, {"comments" : {"$slice" : 10}})
// 嵌套查询
db.users.find({"name.first" : "Joe", "name.last" : "Schmoe"})
// 嵌套查询,仅当嵌套的元素是数组时使用
db.users.find({"comments" : {"$elemMatch" : {"author" : "joe", "score" : {"$gte" : 5}}}})
// 复杂的查询,$where当然是非常方便的,但效率低下。对于复杂查询,考虑的顺序应当是 正则 -> MapReduce -> $where
db.users.find({"$where" : "this.x + this.y == 10"})
// $where可以支持javascript函数作为查询条件
db.users.find({"$where" : "function() { return this.x + this.y == 10; }"})
// 返回第(10, 11]条,按"x"进行排序; 三个limit的顺序是任意的,应该尽量避免skip中使用large-number
db.users.find().sort({"x" : 1}).limit(1).skip(10)

批量操作

更新

db.form_product.find({"xisShelf": true}).forEach(function(item){
	db.form_product.update({"id": item.id},{$set:{"xisShelf": false}});
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值