如何在 mongodb 中找到两个 Collection 的交集?
How to find Intersection of Two Collection in monogdb?
比方说,我有 2 collection
第一个:-
db.product_main
{
_id:123121,
source_id:"B4456dde1",
title:"test Sample",
price: 250
quantity: 40
}
由大约 ~10000 objects(数组)组成,唯一字段是 source_id.
第二个:-
db.product_id
{
"_id":58745633,
"product_id":"B4456dde1"
}
由 ~500 组成,只有字段 "product_id" 等于 "source_id" of db.product_main
现在,我想将两个 collection 相交,以便我只找到 db.product_id 中不存在的那些。
db.product_main.aggregate({any query})
只需使用查找阶段查找与 'product_main' 集合关联的产品,然后匹配空数组(即未找到 product_id 的记录)
db.product_main.aggregate([
{
$lookup: {
from: "product_id",
localField: "source_id",
foreignField: "product_id",
as: "products_available"
}
},
{
$match: {
products_available: {
$size: 0
}
}
}
])
On WRITE
使用聚合管道的操作您还可以使用 $out
命令直接卸载统计更新并将缓存结果存储在 product_stats
集合中(例如)。
稍后在 web/ui/api READ
操作中仅使用此缓存集合。当然,您可以为缓存和非缓存结果创建数据库查询方法。
比方说,我有 2 collection
第一个:-
db.product_main
{
_id:123121,
source_id:"B4456dde1",
title:"test Sample",
price: 250
quantity: 40
}
由大约 ~10000 objects(数组)组成,唯一字段是 source_id.
第二个:-
db.product_id
{
"_id":58745633,
"product_id":"B4456dde1"
}
由 ~500 组成,只有字段 "product_id" 等于 "source_id" of db.product_main
现在,我想将两个 collection 相交,以便我只找到 db.product_id 中不存在的那些。
db.product_main.aggregate({any query})
只需使用查找阶段查找与 'product_main' 集合关联的产品,然后匹配空数组(即未找到 product_id 的记录)
db.product_main.aggregate([
{
$lookup: {
from: "product_id",
localField: "source_id",
foreignField: "product_id",
as: "products_available"
}
},
{
$match: {
products_available: {
$size: 0
}
}
}
])
On WRITE
使用聚合管道的操作您还可以使用 $out
命令直接卸载统计更新并将缓存结果存储在 product_stats
集合中(例如)。
稍后在 web/ui/api READ
操作中仅使用此缓存集合。当然,您可以为缓存和非缓存结果创建数据库查询方法。