Mongodb: невозможно вернуть выбранные данные из findOne {engine: 1} - PullRequest
0 голосов
/ 05 января 2019

Как добавить второй параметр {engine: 1, _id: 0}, чтобы findOne возвращал только массив engine {make: "Acrua", модель: "CL", год: "1997"}. Все документы в этой коллекции уникальны. Должен ли я использовать поиск вместо findOne. Я хочу получить доступ только к одному документу и отправить массив обработчика клиенту.

[
  {
    make: "Acura",
    model: null,
    year: null,
    engine: ["2.0L", "2.8L"]
  },
  {
    make: "Acura",
    model: "CL",
    year: null,
    engine: ["3.2L", "4.0L"]
  },
  {
    make: "Acura",
    model: "CL",
    year: "1997",
    engine: ["2.2L", "3.0L"]
  }
]


app.get("/ajax_/:tab/:category/:make/:model/:year", function (req, res) {
  db.collection("Autos_").findOne({make: req.params.make, model: params.model, year: req.params.year}, function(err, result) {

    if (result) {
      console.log(result);
    }
  });
})

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Ваши параметры могут быть неопределенными по некоторым причинам, поэтому вам необходимо явно установить их на null. Проецирование только движка, поскольку {_id:0, engine:1} может проецировать только зарегистрированный движок. так что вы можете легко вернуть result.engine, если существует.

app.get("/ajax_/:tab/:category/:make/:model/:year", function (req, res) {

   let make = req.params.make? req.params.make : null ;
   let model = req.params.model? req.params.model : null;
   let year = req.params.year ? req.params.year : null;

   db.collection("Autos_").findOne(
            {make: make, model: model, year: year},
            {_id:0, engine:1},
            function(err, result) {
                     if( err ) {
                           // internal error
                           throw new Error( err);
                     }
                     if (result) {
                          console.log(result.engine);
                     }
            });
})
0 голосов
/ 05 января 2019

Как выглядит «результат» при входе в консоль? Вы можете просто выбрать значение свойства, которое вы ищете, и вернуть его таким образом. Согласно документации MongoDB:

Документ с результатами поиска findOne
Вы не можете применять методы курсора к результат findOne (), потому что возвращается один документ. У тебя есть прямой доступ к документу:

var myDocument = db.bios.findOne();

if (myDocument) {
   var myName = myDocument.name;

   print (tojson(myName));
}

Укажите поля для возврата
Следующая операция находит документ в коллекции BIOS и возвращает только имя, вкладки и _id поля:

db.bios.findOne(
    { },
    { name: 1, contribs: 1 }
)

https://docs.mongodb.com/manual/reference/method/db.collection.findOne/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...