我有两个收藏夹:
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的文本,这可能会杀死我的数据库。
问题:解决此问题的最佳方法是什么?
谢谢! :-)
答案 0 :(得分:1)
如果我们不考虑将annotations
保存为以,
分隔的自由文本是一个坏主意,那么对于您可能会给定的特定用例,性能/响应时间就不成问题了尝试$lookup,类似:
Annotations.aggregate([
{ $match: { annotations: { '$in': 'zebra' } } },
{
$lookup:
{
from: "Images",
localField: "imagesId",
foreignField: "_id",
as: "image"
}
}
]);