Mongo对内嵌文档的CRUD

{
  "_id" : ObjectId("5706032acd0a6194868cf53e"),
  "list" : {
    "age" : 22.0,
    "name" : "qiaoansheng"
  },
  "BookS" : [{
      "bookName" : "在绝望中寻找希望"
    }]
}

现在数据库中有这么一个文档,下面就是对他进行一系列的增删改查

我需要在list中再加一个key  school

db.ansheng.update({"_id":ObjectId("5706032acd0a6194868cf53e")},{"$set":{"list.school":"驻马店第一高级中学"}})

执行完成后结果如下

{
  "_id" : ObjectId("5706032acd0a6194868cf53e"),
  "list" : {
    "age" : 22.0,
    "name" : "qiaoansheng",
    "school" : "驻马店第一高级中学"
  },
  "BookS" : [{
      "bookName" : "在绝望中寻找希望"
    }]
}
View Code

{
  "_id" : ObjectId("5706032acd0a6194868cf53e"),
  "list" : [{
      "age" : 13.0,
      "name" : "张三",
      "school" : "驻马店市第一小学"
    }, {
      "bookName" : "在绝望中寻找希望",
      "money" : 188.0
    }, {
      "age" : 23.0,
      "name" : "隔壁老王",
      "cshool" : "家里蹲大学"
    }],
  "BookS" : [{
      "bookName" : "在绝望中寻找希望"
    }],
  "aaaaa" : 20.0
}

现在有上面的这一个文档,对list中的数据进行一些列的修改

$inc  可以用来修改 值类型的数据,不能修改长字符串类型的数据

db.ansheng.update({"aaaaa":20},{"$inc":{"list.0.age":2}})

db.【对应的表】.update(【查询参数】,{"$inc":{"list.【这个集合的下标】.【需要修改的字段名称】":2}})

根据 name 修改 隔壁老王 的年龄

db.ansheng.update({"list.name":"隔壁老王"},{"$inc":{"list.$.age":100}})

这种方法只会修改第一个匹配到的数据,如果这个集合中还有一个 隔壁老王 则它的age是不会修改的

db.nqwd.find({"books.name":"语文"})//可以匹配到内嵌文档中 包含语文的所有数据
当我需要找到 name为语文并且money为200的数据
db.nqwd.find({"books.name":"语文","books.money":200})或者
db.nqwd.find({books:{"$elemMatch":{name:"语文",money:200}}})

原文地址:https://www.cnblogs.com/ansheng/p/5442597.html