MongoDB Join / Aggregate Query возвращает молчание в консоли - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть две коллекции в моем MongoDB, к которым я хотел бы присоединиться с помощью совокупного запроса, но у меня возникают трудности с возвратом результирующих объектов в консоль. В настоящее время он ничего не возвращает, что само по себе странно. Надеюсь, вы можете помочь ...

Коллекция 1 - это scrapedData и статьи о соскобах с Chicago Tribune:

{
"_id": ObjectId("123"),
"headline":"Cubs Javier Baez Wins Silver Slugger Award",
"link": "www.chicagotribune.com",
 }

Коллекция 2 называется comments и включает в себя комментарии, размещенные на моем сайте и связанные с каждой статьей, найденной в статье:

  {
  "_id": ObjectId("456"),
  "articleId":"123",
  "author": "John Chicago"
  "message": "Good for Javier!"
  }
  {
  "_id": ObjectId("789"),
  "articleId":"123",
  "author": "Jane Q."
  "message": "MVP! MVP!"  
  }

Моя текущая попытка собрать ответ из базы данных, которая присоединяется к заголовку статьи, и все комментарии, связанные с ней:

 db.comments.aggregate([
          {$match : {articleId : JSON.stringify(123)}},
          {
            $lookup:
              {
                from: "scrapedData",
                localField: "articleId",
                foreignField: "_id",
                as: "commentsPosted"
              }
         }
       ]),function(err, response) {
        if(err) {
          console.log(err); 
        } else {
          console.log(response);
        }
      }}); 

Будем весьма благодарны за любые указатели, которыми вы можете поделиться.

1 Ответ

0 голосов
/ 18 ноября 2018

В соответствии с совокупной документацией ваша функция обратного вызова и общий JS несколько испорчены, попробуйте это:

db.comments.aggregate([
{ $match: { articleId: JSON.stringify(123) } },
{ $lookup: {
  from: "scrapedData",
  localField: "articleId",
  foreignField: "_id",
  as: "commentsPosted"
}}], function(err, response) {
 if (err) {
    console.log(err);
 } else {
    console.log(response);
}});

Или лучше, используя Promises:

return db.comments.aggregate([
 { $match: { articleId: JSON.stringify(123)}},
 { $lookup: {
   from: "scrapedData",
   localField: "articleId",
   foreignField: "_id",
   as: "commentsPosted"
 }}])
 .exec()
 .then(function(response) {
    console.log(response)
 }).catch(function(e){
    console.log(e)
 })
...