Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从嵌套对象数组中查找猫鼬

从嵌套对象数组中查找猫鼬
EN

Stack Overflow用户
提问于 2021-09-07 12:21:49
回答 1查看 276关注 0票数 0

嘿,我对猫鼬很陌生,我的头也找不到。

模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User->resumes[]->employments[]

UserSchema

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    resumes: [ResumeSchema],
    ...
}

ResumeSchema

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    employments: [EmploymentSchema],
    ...
}

EmploymentSchema

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    jobTitle: {
        type: String,
        required: [true, "Job title is required."]
    },
    ...
}

背景

用户必须从现有简历的现有数据中输入职位名称和需求建议,并输入他们的职务名称。

我试过以下代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let q = req.query.q; // Software
User.find({ "resumes.employments.jobTitle": new RegExp(req.query.q, 'ig') }, {
    "resumes.employments.$": 1
}, (err, docs) => {
    res.json(docs);
})

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    {
        _id: '...',
        resumes:[
            {
                employments: [
                    {
                      jobTitle: 'Software Developer',
                      ...
                    },
                    ...
                ]
            },
            ...
        ]
    },
    ...
]

预期OutPut

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["Software Developer", "Software Engineer", "Software Manager"]

Problem 1:)返回的数据太多,因为我只需要jobTitle

2:)所有的工作都已返回,而查询与其中的一项相匹配

3)有什么更好的方法吗?通过索引还是通过$search?我在猫鼬文档中找不到太多信息来创建搜索索引(我也不知道如何创建复合索引以使其工作)

我知道可能有很多答案,但没有人帮上忙,或者我无法让他们发挥作用.我对mongodb非常陌生,我一直通过SQL或ORM处理关系数据库,所以我的mongodb概念和知识是有限的。

因此,如果有更好的解决办法,请告诉我。或者能让现在的那个起作用的东西。

EN

回答 1

Stack Overflow用户

发布于 2021-09-07 13:42:29

您可以使用下面的一个聚合查询来获得这个结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "jobTitle": [
      "Software Engineer",
      "Software Manager",
      "Software Developer"
    ]
  }
]

查询是:

  • 首先使用$unwind两次解构数组并获取值。
  • 然后,$match按您希望使用$regex筛选的值进行筛选。
  • 然后$group将所有值集合在一起(使用_id: null$addToSet不添加重复项)。
  • 最后,$project只显示您想要的字段。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User.aggregate({
  "$unwind": "$resumes"
},
{
  "$unwind": "$resumes.employments"
},
{
  "$match": {
    "resumes.employments.jobTitle": {
      "$regex": "software",
      "$options": "i"
    }
  }
},
{
  "$group": {
    "_id": null,
    "jobTitle": {
      "$addToSet": "$resumes.employments.jobTitle"
    }
  }
},
{
  "$project": {
    "_id": 0
  }
})

示例这里

另一种选择是将$filter应用于$project阶段:

与以前类似,但两次使用$filter而不是$unwind

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User.aggregate({
  "$unwind": "$resumes"
},
{
  "$project": {
    "jobs": {
      "$filter": {
        "input": "$resumes.employments",
        "as": "e",
        "cond": {
          "$regexMatch": {
            "input": "$$e.jobTitle",
            "regex": "Software",
            "options": "i"
          }
        }
      }
    }
  }
},
{
  "$unwind": "$jobs"
},
{
  "$group": {
    "_id": null,
    "jobTitle": {
      "$addToSet": "$jobs.jobTitle"
    }
  }
},
{
  "$project": {
    "_id": 0
  }
})

示例这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69094158

复制
相关文章
JS-比较函数中嵌套函数,可以排序【对象数组】
1 function createCompareFun(propertyName){ 2 return function(object1,object2){ 3 var value1 = object1[propertyName]; 4 var value2 = object2[propertyName]; 5 if(value1>value2){
xing.org1^
2018/05/17
4.9K0
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
id int primary key auto_increment, — 主键id
全栈程序员站长
2022/09/22
4.3K0
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
PHPJSON嵌套对象和数组的解析方法
在PHP编程开发中,JSON是一种非常常用的数据格式。它具有简单、轻量和易于解析的特点,非常适合用于数据交换和存储。当我们处理JSON数据时,经常需要解析嵌套的对象和数组,本文将介绍几种解析方法。
用户10354340
2023/07/26
2860
es6中的find filter 在数组中查找对象
var aa=[{id:1,name:’张三’},{id:2,name:’李四’},{id:3,name:’王五’},{id:2,name:’赵六’}]
kirin
2020/12/31
2K0
JS查找数组中是否包含某个元素或对象「建议收藏」
做业务需求时遇到一个功能模块需要动态增删数组对象,需求本身完成不难,但是写出来的代码我总感觉很冗余,于是我在网上找了很久,看有没有现成的轮子可以使用,最终找到了es6中的一个方法 将其记录在此,方便以后自己翻阅查找
全栈程序员站长
2022/11/02
3.2K0
查找数组中重复的数字
        题目来源于《剑指Offer》中的面试题3:找出数组中重复的数字。   // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,   // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},   // 那么对应的输出是重复的数字2或者3。         解决方法有多种,包括数组排序,哈希表法,以及作者推荐的重排数组法。此处介绍自己的一个做法,以空间换
waylon
2018/03/08
4K0
mongodb 中嵌套数组的且查询
experts:[{expertId:"1",result:"success",......}
一笠风雨任生平
2019/08/02
6.7K0
PyTorch入门视频笔记-从数组、列表对象中创建Tensor
Numpy Array 数组和 Python List 列表是 Python 程序中间非常重要的数据载体容器,很多数据都是通过 Python 语言将数据加载至 Array 数组或者 List 列表容器,再转换到 Tensor 类型。(为了方便描述,后面将 Numpy Array 数组称为数组,将 Python List 列表称为列表。)
触摸壹缕阳光
2020/11/12
4.9K0
python数组_python在数组中查找指定元素
member = [‘a’,’b’,’c’,’1′,’2′,3]print “member[0]:”, member[0]
全栈程序员站长
2022/09/22
3.3K0
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
用户3003813
2018/09/06
1.9K0
[剑指offer] 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
尾尾部落
2018/09/04
2.1K0
[剑指offer] 二维数组中的查找
在排序数组中查找数字
思路: 2分查找数组中的第一个k: 1. 如果中间数字大于k,那么k只可能出现在前半段 2. 如果中间数字小于k,那么k只可能出现在后半段 3. 如果中间数字等于k: - 如果中间数字的前面不是k,那么中间数字恰好就是第一个k - 如果中间数字的前面是k,那么第一个k肯定在前半段
用户8639654
2021/07/23
3.7K0
Java中创建对象数组[通俗易懂]
1.对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 2.对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 3.对象数组的实例化: 类名[ ] 对象数组名 = new 类名[ 数组大小] 以创建Student类的对象数组为例
全栈程序员站长
2022/09/13
3.2K0
有序数组中与任意数组查找不同的部分-二分查找
题目:在一串有序数组中,给出一串随机数组查找其中不同的部分 数组A:{2,3,5,8,9,11} 数组B:{9,8,2,10,1} 结果:10,1 import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; public class GetAllNotIncluded { // 利用二分查找查找与子串不
sr
2018/08/20
1.4K0
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
MickyInvQ
2021/10/26
1.6K0
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
崩天的勾玉
2021/12/20
1.5K0
二维数组中的查找
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1946753
后端码匠
2021/08/18
1.7K0
Elasticsearch使用:嵌套对象
官网地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/nested-objects.html
HLee
2021/04/23
6.3K0
Elasticsearch使用:嵌套对象
嵌套对象转map
嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转map,有key就能得到相应的value。
全栈程序员站长
2022/08/30
1.6K0
房上的猫:数组
一.数组:  1.定义:   (1)数组就是一个变量,用于将相同数据类型的数据储存在内存中   (2)数组中的每一个数据元素都属于统一数据类型  2.基本要素:   (1)标识符:    和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组   (2)数组元素:    当给出数组名称,即数组标识符后,要向数组中存放数据,这些数据就称为数组元素   (3)数组下标:    在数组中为了正确地得到数组的元素,需要对它们进行编号,这样计算机才能去存取,这个编号就称为数组下标   (4)元素类
房上的猫
2018/03/14
8780
房上的猫:数组

相似问题

用猫鼬查找从[对象数组]中查询

13

猫鼬嵌套对象的按键查找

17

更新猫鼬中的嵌套对象数组

13

如何在猫鼬中聚合嵌套查找数组?

13

对象数组值中的猫鼬查找

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文