引用另一个集合可能会导致大量查询

时间:2019-03-08 20:06:41

标签: mongodb

我有两个收藏夹:

Annotations

{
  annotations: ["lion", "zebra", "cobra"],
  imagesId: 1234
}

{
  annotations: ["lion", "zebra", "cobra", "dog"],
  imagesId: 12345
}  

Images

{_id:1234,
 name: "africa"
}
{_id:12345,
 name: "america"
}  

我想找到所有带有zebra注释的图像名称。

这是我的伪方法:

let annotations = Annotations.find({annotations: {'$in': 'zebra'}});  

getOnlyUniqueItems(annotations);  

Images.find({_id: {'$in': annotations}});  

它将起作用,问题是当annotations包含例如1M ids时,查询本身将超过1MB的文本,这可能会杀死我的数据库。

问题:解决此问题的最佳方法是什么?
谢谢! :-)

1 个答案:

答案 0 :(得分:1)

如果我们不考虑将annotations保存为以,分隔的自由文本是一个坏主意,那么对于您可能会给定的特定用例,性能/响应时间就不成问题了尝试$lookup,类似:

Annotations.aggregate([
  { $match: { annotations: { '$in': 'zebra' } } },
  {
      $lookup:
         {
            from: "Images",
            localField: "imagesId",
            foreignField: "_id",
            as: "image"
        }
   }
]);