MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да запитам MongoDB, за да тествам дали даден елемент съществува?

Тъй като не се нуждаете от броя, трябва да се уверите, че заявката ще се върне, след като намери първото съвпадение. Тъй като производителността на броене не е идеална, това е доста важно. Следната заявка трябва да постигне това:

db.Collection.find({ /* criteria */}).limit(1).size();

Обърнете внимание, че find().count() по подразбиране не спазвайте limit клауза и следователно може да върне неочаквани резултати (и ще се опита да намери всички съвпадения). size() или count(true) ще уважи флага за ограничение.

Ако искате да стигнете до крайности, трябва да се уверите, че вашата заявка използва покрити индекси. Покритите индекси имат достъп само до индекса, но изискват полето, към което правите заявка, да е индексирано. Като цяло, това трябва да го направи, защото count() очевидно не връща никакви полета. Все пак покритите индекси понякога се нуждаят от доста подробни курсори:

db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();

{
  // ...
  "cursor" : "BtreeCursor value_1",
  "indexOnly" : true,  // covered!
}

За съжаление, count() не предлага explain() , така че дали си струва или не е трудно да се каже. Както обикновено, измерването е по-добър спътник от теорията, но теорията може поне да ви спаси от по-големите проблеми.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Разбиране на MongoDB индекси

  2. Mongodb:Изпълнете заявка за диапазон от време от ObjectId в mongo shell

  3. Как да обедините поле на масив в документ в агрегирането на Mongo

  4. MongoDB 3 Java проверява дали съществува колекция

  5. Как да импортирам данни от mongodb в pandas?