gpt4 book ai didi

mongodb - 如何检查一个集合中的 _id 的一部分是否出现在另一个集合中

转载 作者:可可西里 更新时间:2023-11-01 10:03:49 26 4
gpt4 key购买 nike

我有一个集合,其中 _id 的形式为 [message_code]-[language_code],另一个集合的 _id 只是 [message_code]。我想要做的是找到第一个集合中 _id 的 message_code 部分没有出现在第二个集合中的所有文档。

示例:

> db.colA.find({})
{ "_id" : "TRM1-EN" }
{ "_id" : "TRM1-ES" }
{ "_id" : "TRM2-EN" }
{ "_id" : "TRM2-ES" }
> db.colB.find({})
{ "_id" : "TRM1" }

我想要一个将从 colA 返回 TRM2-EN 和 TRM-ES 的查询。当然,在我的实时数据中,每个集合中都有数千条记录。

根据 this question它试图做类似的事情,我们必须保存针对 colB 的查询结果,并在针对 colA 的查询中的 $in 条件下使用它。在我的例子中,我需要在进行比较之前删除 -[language_code] 部分,但我找不到这样做的方法。

如果一切都失败了,我将在 colA 中创建一个仅包含消息代码的新字段,但是有更好的方法吗?

编辑:根据迈克尔的回答,我想出了这个解决方案:

var arr = db.colB.distinct("_id")
var regexs = arr.map(function(elm){
return new RegExp(elm);
})
var result = db.colA.find({_id : {$nin : regexs}}, {_id : true})

编辑:仔细一看,上面的方法终究是行不通的。最后,我只需要添加新字段。

最佳答案

免责声明:这是一个小 hack,可能不会有好的结果。

var arr = db.colB.distinct('_id');
arr.map(function(elm, inx, tab) {
tab[inx] = new RegExp(elm);
});

db.colA.find({ '_id': { '$nin': arr }})

关于mongodb - 如何检查一个集合中的 _id 的一部分是否出现在另一个集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632573/

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