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

Mongodb $where заявката винаги е вярна с nodejs

Първо, имайте предвид, че $where операторът почти никога не трябва да се използва поради причините, обяснени тук (заслугата е на @WiredPrairie).

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

> db.test.insert({a: 42})
> db.test.find({a: 42})
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> db.test.find({$where: function() { return this.a == 42 }}) // works
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> var local_var = 42
> db.test.find({$where: function() { return this.a == local_var }})
error: {
    "$err" : "error on invocation of $where function:\nJS Error: ReferenceError: local_var is not defined nofile_b:1",
    "code" : 10071
}

Освен това изглежда, че драйверът на mongo node.js се държи по различен начин от обвивката, тъй като не сериализира автоматично js функция, която предоставяте в обекта на заявката, и вместо това вероятно отпада клаузата напълно. Това ще ви остави еквивалента на timetables.find({}) което ще върне всички документи в колекцията.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какво означава твърде много позиционни опции, когато правите mongoexport?

  2. Защо не мога да отстранявам грешки в кода в асинхронен метод?

  3. Mongoose/node.js как да намирате, попълвате, правите неща, „освобождавате“ и актуализирате

  4. Средна заявка за агрегиране на Mongo без група

  5. Как да изчислим текущата сума с помощта на агрегат?