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}});
})

你可能感兴趣的:(MongoDB,mongodb)