Mongodb и nodejs с экспресс - PullRequest
       1

Mongodb и nodejs с экспресс

0 голосов
/ 25 октября 2018

Прежде всего, извините за мой плохой английский, но я сделаю все возможное, чтобы объяснить себя.Я студент, который до сих пор пытается разработать проект nodejs с помощью express, который я использовал в качестве db в одном файле json и прорабатывал его.Но теперь я хочу мигрировать в Mongodb.я уже импортировал свою базу данных с помощью "mongoimport --db RestauranteSin" --collection "Restaurante" --file 'filename' ", поэтому он импортировал его нормально.

Следующее, что я делаю, это создание новой конечной точки

app.get('/mongoAllRestaurants', (req, res) => {
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect("mongodb://localhost:27017/", { useNewUrlParser: true },(err, db) => {
    if (err) throw err;
    var dbo = db.db("RestauranteSin");
    var ObjectId = require('mongodb').ObjectID; 
    dbo.collection("Restaurante").find({_id:ObjectId("5bd218627c5b747cdb14c51e"), restaurantes: {$elemMatch : {titulo_restaurante: "BarJanny"}}}).toArray((err, result) => {
      if (err) throw err;
      console.log(result[0]);
      res.send(result);
      db.close();
    });
});

});

И моя БД выглядит примерно так:

[
"_id" : "345678987654",
"restaurantes": [
    {
        "titulo_restaurante": "example1",
        ... 
        ...
        ...
    },
    {
        "titulo_restaurante": "example2",
        ... 
        ...
        ...
    },
    ...
    ...
    ...
]

]

И вот в чем вопрос. ¿Почему, если я делаюзапрос возвращает все мои БД без фильтра? Я много комбинаций запросов, и он всегда возвращает мне все БД или пустой массив? Мне нужно в результате что-то вроде этого:

{
        "titulo_restaurante": "example1",
        ... 
        ...
        ...
    }

1 Ответ

0 голосов
/ 26 октября 2018

В коде запроса есть две ошибки:

  • Вам не хватает команды new.Когда вы находите для документа _id, вы находите объект ObjectID с определенной инициализацией (который является строкой id), поэтому вы должны создать искомый объект: new ObjectId ('idString'), результатбудет ObjectID, который можно сравнить с документами _id для поиска нужного документа (обратите внимание, что для var ObjectId = require('mongodb').ObjectID; вам требуется класс ObjectID пакета mongodb и назначьте его для var ObjectId).

  • Проекция внутри находки устарела.Вы можете использовать projection (), например: db.collection('collectionName').find({ field: value }).project({ field: value }) В случае, если ваш запрос: dbo.collection("Resturante").find({ _id: new ObjectId('5bd218627c5b747cdb14c51e') }).project({ restaurantes: { . $elemMatch: { titulo_restaurante: "BarJanny" } } })

Таким образом, ваш запрос без ошибок:

dbo.collection("Resturante")
    .find({ _id: new ObjectId('5bd218627c5b747cdb14c51e') })
    .project({ restaurantes: { $elemMatch: { titulo_restaurante: "BarJanny" } } })
    .toArray((err, result) => {
        if (err) throw err;
        console.log(result[0].restaurantes[0]); // { titulo_restaurante: 'BarJanny' }
        db.close();
    });

Добавьте res.send(result) перед db.close() для ответа GET.

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