Общие операторы в MongoDB

база данных внешний интерфейс MongoDB

Оператор удаления MongoDB

удалить () удалить

  1. удалить коллекциюdb.collection.deleteOne()
  2. Удалить несколько коллекцийdb.collection.deletMany();

удалить () удалить

  1. Удалить все данные имени: Li Sidb.student.remove({name:"李四"});
  2. удалить только один пол: мужские данные удалить только одинdb.student.remove({sex:"男"},true);
  3. удалить всеdb.student.remove({});

Поддельное удаление базы данных

Иногда, когда пользователь удаляет операцию, требование такое, просто скрыть эти данные, а не удалять их из базы данных. В настоящее время используется поддельное удаление. Например, вот два поста Чжан Санфа в Weibo:

db.student.insert([
    {name:"张三",content:"今天心情好",isDel:0},
    {name:"张三",content:"今天心情一般",isDel:0},
]);

b21d2b7140562e21fcbe9c168e02da9.png

Пользователь добавляет два фрагмента данных, но сохраняет только последний, а первый удаляет.В это время используется ложное удаление, и при добавлении данных добавляется полеisDel:0
Поэтому, когда пользователь удаляет данные, выполняется не метод удаления, а метод обновления.

db.student.update({"_id" : ObjectId("5bd6a46f1eb7a22fa07cb382")},{
    $set:{
      isDel:1
    }
});

98cf763807e662cd724e6d65f1638fb.png
когдаisDel:0Да означает, что пользователь не был удален, 1 означает, что пользователь был удален

Поэтому вам нужно фильтровать условия имени и isDel при запросе

db.student.find({name:"张三",isDel:0});

Запросите данные, которые пользователь не удалил:

121b7fc4d6f40af1de843359cdbf585.png

Затем вы можете реализовать поддельное удаление.

Обработка и изменение пакетных данных

  1. Вставьте 10000 документов в коллекцию
var arr= [];
for(var i=0;i<10000;i++){
   arr.push({counter:i});
}
db.demos.insert(arr);
db.demos.find();
  1. Запросить документы со счетчиком 666 в демоверсияхdb.demos.find({counter:666});
  2. Запросить документы со счетчиком меньше 66 в демоверсияхdb.demos.find({counter:{$lt:666}});
  3. Запросите документ счетчика T666 в демонстрацияхdb.demos.find({counter:{$gt:666}});
  4. Запросите первые 10 данных в демонстрационной коллекции из 1120 документов, счетчик которых больше 66 и меньше 666.db.demos.find({counter:{$gt:66, $lt:666}});
  5. Данные с 1-го по 20-е слово в демо-коллекции Chashidb.demos.find().limit(10);
  6. Проверьте 2-е данные с 1-го по 30-е в коллекции демонстраций. Функция пейджинга пропускает количество записей, ограничивая количество запрашиваемых записей каждый раз.
db.demos.find().skip(0).limit(10);//第一页 从0条开始 每查询10条
db.demos.find().skip(10).limit(10);//第二页 从10条开始 每查询10条
db.demos.find().skip(20).limit(10);//第三页 从20条开始 每查询10条

Связи документов в коллекциях

  1. один к одному: Например: люди и удостоверения личности, муж и жена
  2. один ко многим: Например: родительский и дочерний пользователь и элемент
  3. Многие ко многим: Например: учителя и ученики

один на один

В виде встроенных документов,

//一对一
db.aAndb.insert([
 {name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"},
  {name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"}
])

db.aAndb.find();

один ко многим

Реализуется в виде встроенных документов или в виде коллекций

//一对多  比如  微博 和 微博评论
//添加微博
db.weibo.insert([
{weibo:"世界这么大,我想去看看"},
{weibo:"我要做一名web开发者!!!"}
])

db.weibo.find();

добавить комментарий

db.comments.insert([
{
weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c8"),
list:[
   "那你有钱吗",
    "一个人吗??去呢啊??",
    "加油!!"
]
},
{
weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c9"),
list:[
   "那你要学习HTML",
   "那还要你要学习css",
    "加油!!"
]
}
]);

db.comments.find();

запрос один ко многим

var weibo_id= db.weibo.findOne({"weibo" : "世界这么大,我想去看看"})._id;
db.comments.find({weibo_id: weibo_id});

отношение многие ко многим

Например: студенты и преподаватели может быть связано с несколькими документами,

//多对多  老师《------》学生

//插入老师集合
db.teachers.insert([
{
  name:"语文老师",
  teacher_id: 1,
  student_id:[
     1001,
     1002,
     1003
  ]
  },
{
  name:"数学老师",
  teacher_id: 2,
  student_id:[
     1001,
     1002,
     1003
  ]
  },
{
  name:"英语老师",
  teacher_id: 3,
  student_id:[
     1001,
     1002,
     1003
  ]
 }
])

db.teachers.find();


//插入学生集合
db.students.insert([
{
  name:"小明",
  student_id: 1001,
  teacher_id:[
     1,
     2,
     3
  ]
  },
{
  name:"小红",
  student_id: 1002,
  teacher_id:[
     1,
     2,
     3
  ]
  },
{
  name:"小刚",
  student_id: 1003,
  teacher_id:[
     1,
     2,
     3
  ]
 }
])

db.students.find();
db.teachers.find();

Сортировать и индексировать

Сортировать:

При запросе документов по умолчанию выполняется сортировка по значению _id (в порядке возрастания). sort() может использоваться для указания сортировки документа Объект должен быть передан внутри sort() для указания сортировки документа, где 1 означает возрастающий порядок, а -1 означает убывающий порядок. Порядок сортировки с пропуском лимита может быть изменен произвольно, и он будет автоматически корректироваться во время выполнения. Не хотите, чтобы он сортировался по идентификатору по умолчанию. Хотите, чтобы он сортировался по зарплате.

//按照工资升序排列

db.section.find().sort({wages:1});

//优先按照工资升序排列  如果遇到相同的就在  按照id升序排列
db.section.find().sort({wages: 1},{_id: -1});

показатель:

Показать часть поля Или извлеките часть содержимого в этом поле При запросе вы можете установить проекцию результата запроса во втором параметре

Индекс: найти({условие запроса}, {диапазон поиска (1 показать 0 скрыть)}) Уведомление:_idЕсли не установлено, по умолчанию используется значение 1 (отображение), которое можно скрыть вручную.

db.section.find({}, {name: 1});

//只显示name和wages字段
`db.section.find({}, {name: 1, _id: 0, wages: 1});`

a07a1f2945204ef671ddebc28871c00.png