Подтвердить что ты не робот

Запрос вложенных документов с использованием Mongoose (MongoDB)

Я начинаю с mongodb и с трудом пытаюсь запросить вложенные документы. У меня две схемы:

var LinkSchema = new mongoose.Schema({
    url: String,
    name: String
});

var UserSchema = new mongoose.Schema({
    name: String,
    links: [LinkSchema]
});

Как вы можете видеть, я просто связываю, чтобы создать простой инструмент закладок. Каждый пользователь имеет имя и набор ссылок. Каждая ссылка имеет имя и URL-адрес.

Теперь то, что я пытаюсь сделать, это, например, посмотреть, существует ли ссылка в каком-то ключевом массиве. Я хотел бы иметь возможность сделать что-то вроде этого (пытаясь получить коллекцию ссылок vlad, а затем посмотреть, есть ли ссылка на запрос в коллекции или нет):

app.get("/:query", function(req, res){
  User.findOne({"name":"vlad"}, function(err, user){
    user.links.find({"url":req.params.query}, function(err, foundLinks){
      if(foundLinks){
        res.send("link already exists!");
      } else {
        res.send("link doesn't exist!");
      }
    });
  });
});

Конечно, этот код не работает, потому что, видимо, я не могу сделать "user.links.find()". Думаю, я могу просто сделать user.links.map, чтобы извлечь только URL-адреса, а затем запустить запрос членства против него. Но я думаю, что это будет далеко не правильным решением. Там должен быть способ сделать что-то подобное, используя DB-запросы. Может кто-нибудь помочь? Спасибо!

4b9b3361

Ответ 1

Вы можете запросить встроенный документ в mongoose, подобный этому

   User.find({'links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

и найти ссылки, принадлежащие пользователю "vlad", вы можете написать

   User.find({name:'vlad','links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

Это сделает трюк.