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

Как да намерите името на полето в MongoDB на произволна дълбочина

Прав сте в определеното твърдение на BSON документ не е XML документ. Тъй като XML се зарежда в дървовидна структура, която се състои от „възли“, търсенето по произволен ключ е доста лесно.

Един MonoDB документ не е толкова лесен за обработка и това е "база данни" в много отношения, така че обикновено се очаква да има известна "еднаквост" на местоположенията на данните, за да улесни както "индексирането", така и търсенето.

Въпреки това може да се направи. Но разбира се това означава рекурсивен процес, изпълняващ се на сървъра и това означава обработка на JavaScript с $where .

Като основен пример за обвивка, но общата function е просто низов аргумент към $where оператор навсякъде другаде:

db.collection.find(
  function () {
    var findKey = "find-this",
        findVal = "please find me";

    function inspectObj(doc) {
      return Object.keys(doc).some(function(key) {
        if ( typeof(doc[key]) == "object" ) {
          return inspectObj(doc[key]);
        } else {
          return ( key == findKey && doc[key] == findVal );
        }
      });
    }
    return inspectObj(this);
  }
)

Така че по принцип тествайте ключовете, присъстващи в обекта, за да видите дали съвпадат с желаното „име на полето“ и съдържание. Ако някой от тези клавиши се окаже „обект“, след това се върнете към функцията и проверете отново.

JavaScript .some() гарантира, че намереното "първо" съвпадение ще се върне от функцията за търсене, давайки true резултат и връщане на обекта, където този "ключ/стойност" е присъствал на известна дълбочина.

Обърнете внимание, че $where по същество означава преминаване на цялата ви колекция, освен ако няма друг валиден филтър за заявки, който може да се приложи към „индекс“ на колекцията.

Затова използвайте внимателно или въобще не и просто работете с преструктурирането на данните в по-работеща форма.

Но това ще ви даде своето съвпадение.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да направите пълнотекстово търсене в MongoDB

  2. MongoDB:Твърде много позиционни (т.е. „$“) елементи, открити в пътя

  3. грешка при синтактичния анализ на mongoexport JSON

  4. Как да разрешите MongoError:пулът е унищожен при свързване към CosmosDB

  5. Защо hasOwnProperty на модела mongoose връща false, когато свойството съществува?