• Mongo中的数组操作


    当前mongo中有这么一条数据

    book是一个数组,在他后面添加一条数据

    {
      "_id" : ObjectId("5721f504d1f70435632b5ce7"),
      "qqqqq" : 5.0,
      "list" : {
        "school" : "驻马店第一高级中学",
        "age" : 22.0,
        "name" : "qiaoansheng"
      },
      "book" : ["C#大全", "干你妹三千"]
    }

    db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"book":"mongo权威指南"}})

    执行完成后 mongo权威指南 完美的添加到了,这个数组的后面

    /* 0 */
    {
      "_id" : ObjectId("5721f504d1f70435632b5ce7"),
      "qqqqq" : 5.0,
      "list" : {
        "school" : "驻马店第一高级中学",
        "age" : 22.0,
        "name" : "qiaoansheng"
      },
      "book" : ["C#大全", "干你妹三千", "mongo权威指南"],
      "MyBook" : [{
          "bookName" : "干你妹三千",
          "money" : 188.0
        }, {
          "bookName" : "干你妹三千",
          "money" : 188.0
        }, {
          "bookName" : "mongo权威指南",
          "money" : 188.0
        }]
    }

    MyBook是一个集合,我要在这个集合后面追加一条数据

    db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"MyBook":{"bookName":"在绝望中寻找希望","money":188}}})

     在集合或者数组后面追加多条数据

     db.ansheng.update({"name":"qiao"},{"$push":{"book":{"$each":["在绝望中寻找希望","C#大全"]}}}) 

     这是个数组后面追加多个数据,集合类似

    {
      "_id" : ObjectId("5722941242c4872428edcc89"),
      "name" : "qiao",
      "book" : ["在绝望中寻找希望", "C#大全"],
      "Books" : [{
          "name" : "在绝望中寻找希望",
          "money" : 188.0
        }, {
          "name" : "C#大全",
          "money" : 77.0
        }]
    }

    book是一个数组,向这个数组后面追加一本书,如果这本书存在则不用追加,如果不存在则追加

     db.ansheng.update({"book":{"$ne":"在绝望中寻找希望"}},{"$push":{"book":"在绝望中寻找希望"}})

     db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":"在绝望中寻找希望1"}})

     $addToSet 配合 $each 可以插入多条数据

     db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":{"$each":["在绝望中寻找希望4","在绝望中寻找希望3"]}}})

    删除一个元素

    db.ansheng.update({"name":"qiao"},{"$pop":{"book":1}}) 删除最后一个元素

    db.ansheng.update({"name":"qiao"},{"$pop":{"book":-1}})删除第一个元素

    删除指定的元素

    db.ansheng.update({"name":"qiao"},{"$pull":{"book":"在绝望中寻找希望4"}})

    $pull会把所有匹配到的数据都删除掉,而不是只删除一个

    添加和删除总结

    在数组后面追加数据

    db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"book":"mongo权威指南"}})

    在集合后面追加数据

    db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"MyBook":{"bookName":"在绝望中寻找希望","money":188}}})

    在数组后面追加多条数据

    db.ansheng.update({"name":"qiao"},{"$push":{"book":{"$each":["在绝望中寻找希望","C#大全"]}}})

    在集合后面追加多条数据

    db.ansheng.update({"name":"qiao"},{"$push":{"Books":{"$each":[{"name":"在绝望中寻找希望","money":188},{"name":"C#大全","money":77}]}}})

    在数组后面追加数据,只有不存在才会追加

    db.ansheng.update({"book":{"$ne":"在绝望中寻找希望"}},{"$push":{"book":"在绝望中寻找希望"}})

    db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":"在绝望中寻找希望1"}})

    db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":{"$each":["在绝望中寻找希望4","在绝望中寻找希望3"]}}})追加多条数据

    删除数组第一个或者最后一个元素

    db.ansheng.update({"name":"qiao"},{"$pop":{"book":1}}) 删除最后一个元素

    db.ansheng.update({"name":"qiao"},{"$pop":{"book":-1}})删除第一个元素

    删除指定的元素

    db.ansheng.update({"name":"qiao"},{"$pull":{"book":"在绝望中寻找希望4"}})

    数组中的查询

    {"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c0"),"name" : ["权威指南", "我的梦想", "C#大全"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c1"),"name" : ["我的梦想", "C#大全", "权威指南"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c2"),"name" : ["C#大全", "权威1指南", "我的梦想"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c3"),"name" : ["C#大全", "我的梦想"]}
    现在有这么一个文档
    db.as1.find({name:"C#大全"})//匹配到全部的数据
    db.as1.find({name:"C#大全",name:"权威指南"})//匹配到三条数据
    {"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c0"),"name" : ["权威指南", "我的梦想", "C#大全"]}
    {"_id" : ObjectId("572aba3d734e0336c344e8c1"),"name" : ["我的梦想", "C#大全", "权威指南"]}
    $all
    要找到既有 "C#大全" 又有 "权威指南" 就要使用$all
    db.as1.find({name:{"$all":["C#大全", "权威指南"]}})
    但是我发现这个和上面那一个查询条件是等价的


    查询特定位置的元素
    db.as1.find({"name.1":"权威指南"})
    db.as1.find({"name.0":"C#大全"})

    $size
    $size对于查询数组来说也是分的有用,他可以查询特定长度的数组
    db.as1.find({name:{"$size":2}})


    $slice
    $slice操作符可以返回某个键匹配的数组元素的一个子集
    {"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
    db.as1.find({"_id" : ObjectId("572aba3d734e0336c344e8bf")},{name:{"$slice":2}})
    find有两个参数第一个是用来匹配数据的,第二个是用来设置返回的数据的
    name是一个数组 $slice返回这个数组中前2个元素
    {"$slice":2} 前两个
        { "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "C#大全", "权威指南"] }
    {"$slice":-2} 后两个
        { "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "权威指南", "我的梦想" ] }
    {"$slice":[2,3]} 第2个之后的到第3个为止,如果没有第三个,则返回空
        { "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "我的梦想" ] }
    {"$slice":[3,4]}
        { "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ ] }

  • 相关阅读:
    Gym 101149I: It's the Police (图,思维)
    把ORM封装成一个类(linq to entity)
    jquery跨域,getJson跨域解决方案
    Jquery中AJAX参数详细列表:
    Multipart forms from C# client
    “ThreadPool 对象中没有足够的自由线程来完成操作”的现象和解决办法
    .NET垃圾回收 问题、建议
    C# HttpWebRequest保存cookies模拟登录的方法
    基础连接已经关闭:服务器关闭了本应保持活动状态的连接 解决方法
    C# 模拟上传图片
  • 原文地址:https://www.cnblogs.com/ansheng/p/5444137.html
Copyright © 2020-2023  润新知