2014-12-15 2 views
0

Я видел несколько вопросов, связанных с этим. Но не могу найти ответ, который может мне помочь.агрегированная функция в mongoose node.js не возвращается запись

Вот мой код node.js на стороне сервера, используя mongoose. Этот код просто печатает «Успех в извлечении данных []» в консоли.

var kmphDBSchema = commonRouter.kmphDBSchema; 
    var locationSchema = new kmphDBSchema({result:{locations:{id:String,parent_id:String,countryCode:String,name:String}}}); 
    var locationModel = commonRouter.kmphMongoClient.model('mgh_locations',locationSchema); 

exports.getLocations = function(request, response) { 
    var locationName = '/.*' + request.params.locationName + '.*/'; 
    console.log("locationName: " + locationName); 

    locationModel.aggregate(
     [ 
      { $unwind:"$locations"} 
      ,{ $project:{_id:0,locations:1} } 
      ,{ $match:{"locations.name": locationName}} 
     ] 
     , function (err, res) { 
     console.log('Error=' + err); 
      if (err){ 
      console.log('Error in fetching locations' + err); 
      return (err); 
      } 
      console.log('Success in fetching data' + JSON.stringify(res)); 
      response.send(JSON.stringify(res)); 
    }); 
} 

Вот данные, возвращаемые запросом в оболочке mongo. Эти данные НЕ возвращаются, когда данные извлекаются из node.js с использованием мангуста.

/* 0 */ 
{ 
    "result" : [ 
     { 
      "locations" : { 
       "id" : "1", 
       "parent_id" : "531", 
       "countryCode" : "IN", 
       "name" : "Noida" 
      } 
     }, 
     { 
      "locations" : { 
       "id" : "407", 
       "parent_id" : "531", 
       "countryCode" : "IN", 
       "name" : "Greater Noida" 
      } 
     } 
    ], 
    "ok" : 1 
}. 

А вот оригинальный документ JSON

/* 0 */ 
{ 
    "_id" : ObjectId("548b15d700dcf350ea6a9e1e"), 
    "locations" : [ 
     { 
      "id" : "1", 
      "parent_id" : "531", 
      "countryCode" : "IN", 
      "name" : "Noida" 
     }, 
     { 
      "id" : "2", 
      "parent_id" : "531", 
      "countryCode" : "IN", 
      "name" : "New Delhi" 
     }, 
     { 
      "id" : "3", 
      "parent_id" : "531", 
      "countryCode" : "IN", 
      "name" : "Gurgaon" 
     }, 
     { 
      "id" : "11", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Agra" 
     }, 
     { 
      "id" : "12", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Jaipur" 
     }, 
     { 
      "id" : "13", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Hyderabad" 
     }, 
     { 
      "id" : "14", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Lucknow" 
     }, 
     { 
      "id" : "15", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Kanpur" 
     }, 
     { 
      "id" : "16", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Lansdowne" 
     }, 
     { 
      "id" : "18", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Bangalore" 
     }, 
     { 
      "id" : "19", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Nainital" 
     }, 
     { 
      "id" : "20", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Bhimtal" 
     }, 
     { 
      "id" : "21", 
      "parent_id" : "0", 
      "countryCode" : "IN", 
      "name" : "Kolkata" 
     } 
] 
} 
+0

Необходимо уточнить свой вопрос. «Название» говорит «ничего не возвращено», но вы показываете результат. Понятия не имею, о чем вы говорите. –

+0

Спасибо за быстрый ответ. Данные не печатаются. В консоли оператор журнала просто печатает «Успех в получении данных []». Точные данные не печатаются. Обновлен Вопрос для уточнения – VikramK

+0

Новая учетная запись. Пожалуйста, отредактируйте свой вопрос с подробностями, а не попытайтесь добавить больше комментариев. Просто комментарии и теги, которые вы хотите предупредить о своих изменениях. Кажется, вы спрашиваете, что ваше агрегирование дает разные результаты в мангусте для оболочки. Я не чувствую, что вы действительно публикуете все соответствующие коды, поскольку то, что вы опубликовали, должно работать одинаково. –

ответ

0

Возможно, для более разъяснений для других, когда это условие поиска, который соответствует.

В качестве интерфейса ODM или (Object Document Mapper), библиотека Mongoose имеет некоторые определенные аспекты в ее функциях, которые могут смутить неосторожных. Наиболее распространенным аспектом является, очевидно, «именование» моделей. Mongoose следует шаблону, который использует имя модели как представление «Объекта» в «плюрализованной» форме, когда по умолчанию «называет» коллекцию. Это приводит к некоторым проблемам.

Используемая здесь библиотека приводит к некоторым распространенным перегибам. Поэтому на следующем примере:

var mongoose = require("mongoose"), 
    Schema = mongoose.Schema; 


var personSchema = new Schema({ 
    "name": String, 
    "tile": STring 
}); 

mongoose.model("Person", personShema); 

ожидает, что «модель» в хранилище коллекции следует назвать people. Это стандартное EN или перегиб английского языка, предоставляемый библиотекой. Но есть «дефолтная» обработка этого, которая присутствует в базовом методе, используемом самой библиотекой мангуста. Поскольку функция фактически принимает «три» аргумента, при этом «третий» является явным совпадением с именем коллекции, а не по умолчанию «плюрализация».

mongoose.model("Person", personSchema, "Person"); 

Теперь, collection на самом деле назван Person, а не People и поэтому больше напоминает то, что вы могли бы ожидать.

примечание Fair3 указано, что действия по умолчанию - это то, что ожидается от good практика программирования. «Модель» здесь представляет собой «единственное» представление класса, а базовая «коллекция» представляет собой «много» этих «объектов» в коллекции, как это в основном подразумевается. Так что это действительно так.

Если вы применяете «модель» к структуре, которая уже определила ее «коллекционные» имена, то используйте «третий» аргумент, чтобы указать это имя при создании объекта. Это позволяет понять механизм, а также для чтения вашего кода.

Смежные вопросы