gpt4 book ai didi

mongodb - 如何使用 MongoDB 在一个集合中查找不在另一个集合中的项目

转载 作者:行者123 更新时间:2023-12-05 07:55:57 25 4
gpt4 key购买 nike

我想查询我的 mongodb 以执行 2 个集合之间的不匹配。这是我的结构:

集合A:

_id, name, firstname, website_account_key, email, status

集合B:

_id, website_account_key, lifestage, category, target, flag_sistirt

我正在尝试在 B 中查找项目,为此,A 中没有行(website_account_key 是唯一的,允许为每个 A [一对一] 在 B 中查找元素)

我试过:

dataA_ids = db.dataA.find().map(function(a){return a.website_account_key;})

db.dataB.find( { website_account_key: { $nin: [dataA_ids] } } )

但我什么都没有,除非我添加了一些应该工作的测试数据:(

这是我测试的全部代码:

db.products.insert( { item: "card", qty: 15, code:100 } )
db.products.insert( { item: "pass", qty: 15, code:230 } )
db.products.insert( { item: "badge", qty: 15, code:543 } )
db.products.insert( { item: "passX", qty: 15, code:876 } )

db.references.insert( { code:230, ref:"AAZRT"})
db.references.insert( { code:888, ref:"RUBFE"})
db.references.insert( { code:876, ref:"ERHAA"})
db.references.insert( { code:120, ref:"DRETAR"})

codeInProducts = db.products.find().map(function(a){return a.code;})
db.references.find( { code: { $nin: [codeInProducts] } } )

我的目标是检索引用中我没有在产品中找到元素的行(引用中的行在产品中找不到(代码是链接))

最佳答案

从 mongodb 3.6 版开始,您可以使用 $lookup 仅通过一个查询来完成:

db.dataA.aggregate([
{
$group: {
_id: 0,
codes: {$addToSet: "$code"}
}
},
{
$lookup: {
from: "dataB",
let: {codes: "$codes"},
pipeline: [
{$match: {$expr: {$not: {"$in": ["$code", "$$codes"]}}}}
],
as: "codes"
}
},
{
$unwind: "$codes"
},
{
$replaceRoot: {
"newRoot": "$codes"
}
}
])

在这个playground example上可以看出

关于mongodb - 如何使用 MongoDB 在一个集合中查找不在另一个集合中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29076006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com