首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确保集合中存在文档数组

确保集合中存在文档数组
EN

Stack Overflow用户
提问于 2020-12-24 13:37:03
回答 1查看 31关注 0票数 0

我有一个包含大约40k个文档的集合,如下所示:

代码语言:javascript
运行
复制
{

    "_id":{"$oid":"5e988b703117c034b0630f8"},
    "name":"London Heathrow Airport",
    "country":"United Kingdom",
    "iata":"LHR",
    ...
}

我希望能够处理一个数组(实际上是一个Javascript,它可能有数百个元素),如下所示:

代码语言:javascript
运行
复制
["LHR", "LGW", "BFS", ...]

此数组中的项与文档上的iata属性相关。

我希望返回一个数组,其中返回集合中无法找到的元素,如果可以找到所有元素,则返回空值或空数组。例如,如果"LHR“和"LGW”匹配集合中文档的iata属性,但"BFS“不匹配,则应该返回"BFS”

我可以在数组中插入,对数组中的每一项进行单独的查询,但是如果输入数组有数百个元素,这似乎是非常低效率的。还有更好的办法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-24 19:49:31

您可以查询集合中是否匹配iata代码,并对结果和iata代码数组进行区分:

给定具有以下文档的集合airports

代码语言:javascript
运行
复制
{
    "_id": 1,
    "name":"London Heathrow Airport",
    "country":"United Kingdom",
    "iata":"LHR",
},
{
    "_id": 2,
    "name":"Ljubljana Airport",
    "country":"Slovenia",
    "iata":"LJU",
},

给定下面的iata数组:

代码语言:javascript
运行
复制
var iatas = ["LHR", "LJU", "BFS"];

查找匹配的文档并以iata值数组的形式返回结果:

代码语言:javascript
运行
复制
var result = [];
db.airports.find({
    "iata": {
        $in: iatas
    }
}).toArray().map( 
    function(u) {
        result.push(u.iata)
    }
);

结果如下:

代码语言:javascript
运行
复制
//result
[
    "LHR",
    "LJU"
]

现在您可以在resultiatas之间做一些区分

代码语言:javascript
运行
复制
var nonexistentIatas = iatas.filter(x => !result.includes(x));

nonExistentIatas的内容如下:

代码语言:javascript
运行
复制
[
    "BFS"
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65439061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档