zoukankan      html  css  js  c++  java
  • MongoDB: CURD操作

    >> 创建:
    ·db.foo.insert({"bar":"baz"}) //如果文档中没有"_id"键会自动增加一个
    ·db.foo.batchInsert([{"_id":0},{"_id":2}])
     //只适用将多个文档插入到一个集合,不能单次请求中多个文档批量插入多个集合中
     // 当前Mongo能接收最大的消息长度是48M
     
    # 插入校验
    ·每个文档必须小于16M (Object.bsonsize(doc)查看bson大小)
     
    >> 删除:
    ·db.foo.remove()//删除所有集合中的文档,但是不删除集合本身
    ·db.foo.remove({"opt":true})
    ·db.foo.drop()//删除整个集合(慎用)

    >> 更新:
    # 基本更新:
    ·db.foo.update() //更新的过程中必须保证同一个文档键不能重复

    # 修改器:
    ·db.foo.update({"game":"game"},{"$inc":{"score":1000}}) //$inc 是对某个字段的值进行增加和减少操作,适用于数值类型
    ·db.foo.update({"_id":1},{"$set":{"fav":"fav"}}) //修改非数值类型的字段的值
    ·db.foo.update({"_id":1},{"$unset":{"fav":1}}) //删除这个键
    + 数组修改器:

    + 添加元素:
    ·db.foo.update({"title":"blog"},{"$push":{"comments":"comments"}}) //在文档中添加一个元素
    ·db.foo.update({"title":"blog"},{"$push":{"comments":{"$each":[1,3,5]}})//添加多个值
    ·db.foo.update({"title":"blog"},{"$push":{"comments":{"$each":[1,3,5],"$slice":-10}})
     //设置添加元素的数量,"$slice"值为负整数
    ·db.foo.update({"title":"blog"},{"$push":{"comments":{"$each":[1,3,5],"$slice":-10,"$sort":{"rating":-1}}})
    //"$slice","$sort"与"$push"配合使用,必须使用"$each"

    # 数组操作:
    ·db.papers.update({{"authors":{"$ne":"richie"}},{"$push":{"authors":richie}}}) //$ne先查询数组中是否存在这个元素
    ·db.users.update({"_id":1},{"$addToSet":{"emails":"joe@gmial.com"}}) //避免插入重复的值
    ·db.users.update({"_id":1},{"$addToSet":{"emails":{"$each":["joe@gmial.com","job@gmial.com"]}}})

    ·db.blog.update({"post":post_id},{"$inc":{"comments.0.votes":1}})//基于数组的下标位置修改
    ·db.blog.update({"commetns.author":"john"},{"$set":{"comments.$.author":"jim"}})

    # 删除元素:
    ·db.lists.update{{},{"$pull":{"todo":"laundry"}}} //指定条件删除某个元素,会将所有匹配的值删除
    ·{"$pop":{"key":1}}//从数组末尾删除
    ·{"$pop":{"key":-1}} //从数组头部删除

    >> 特殊更新:
    ·db.blog.update({"url":"/blog"},{"$inc":{"pageviews":1},true})//true如果没有找到更新条件的文档则创建
    ·db.users.update({},{"$setOnInsert":{"createdAt":new Date()},true}) //创建时赋值,之后所有的更新操作都不会改变

    # save(doc)函数:如果文档存在就更新文档,如果不存在就创建

    >> 更新多个文档:??
    ·findAndModify

    => 写入安全:


    >> 查询
    # 基本查询:
    ·db.users.find({},{"username":1,"email":1,"_id": 0}) //指定某个字段显示

    # 带条件的查询:
    内层文档:"$lt"、"lte"、"$gt"、"gte" 对应<,<= ,> ,>=
    外层文档:"$and","$or","$nor"
    ·db.users.find({"registered":{"$lt":start}})
    ·db.users.find({"username":{"$ne":"joe"}}) 查询所有名字不为joe的用户

    ·db.raffle.find({"ticket":{"$in":[1,2,3]}}) //一个键与多个值匹配
    ·db.raffle.find({"$or":[{"ticket":{"$in":[1,3,5]}},{"winner":true}]}) //or查询

    ·db.users.find({"id_num":{"$mod":[5,1]}})
    ·db.users.find({"id_num":{"$not":{"$mod":[5,1]}}})

    => 一个键可以任意组合多个条件,但是一个键不能对应多个更新修改器

    # 特定类型查询:
    ·db.c.find({"z":{"$in":[null],"$exists":true}}) //null查询
    ·db.users.find({"name":/joe/i})//正则表达式查询

    # 数组查询:
    ·db.food.find({"friut":{$all:["apple","banana"]}})
    ·精确匹配对于数组依赖顺序


  • 相关阅读:
    基数排序
    kt-Mapper 笔记
    归并排序
    快速排序
    第十一天——递归(五)
    第十天——闭包(一)
    第八天——函数的嵌套以及gloabal、nonlocal(三)(重点:执行过程)
    第八天——函数的作用域(二)
    第八天——函数的动态参数(一)
    第七天——函数的参数(二)
  • 原文地址:https://www.cnblogs.com/monion/p/5520924.html
Copyright © 2011-2022 走看看