热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

查找包含特定值的数组的文档

本文翻译自:FinddocumentwitharraythatcontainsaspecificvalueIfIhavethisschema如果我有这个架构..

本文翻译自:Find document with array that contains a specific value

If I have this schema... 如果我有这个架构...

person = {name : String,favoriteFoods : Array
}

... where the favoriteFoods array is populated with strings. ...在字符串中填充favoriteFoods数组。 How can I find all persons that have "sushi" as their favorite food using mongoose? 我怎样才能找到所有以猫鼬为食的人?

I was hoping for something along the lines of: 我一直希望以下方面的东西:

PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});

(I know that there is no $contains in mongodb, just explaining what I was expecting to find before knowing the solution) (我知道mongodb中没有$contains ,只是在知道解决方案之前先解释了我期望找到的内容)




#1楼

参考:https://stackoom.com/question/1E9AM/查找包含特定值的数组的文档




#2楼

As favouriteFoods is a simple array of strings, you can just query that field directly: 由于favouriteFoods是一个简单的字符串数组,因此您可以直接查询该字段:

PersonModel.find({ favouriteFoods: "sushi" }, ...);

But I'd also recommend making the string array explicit in your schema: 但我也建议您在架构中使字符串数组显式:

person = {name : String,favouriteFoods : [String]
}

The relevant documentation can be found here: https://docs.mongodb.com/manual/tutorial/query-arrays/ 相关文档可以在这里找到: https : //docs.mongodb.com/manual/tutorial/query-arrays/




#3楼

There is no $contains operator in mongodb. mongodb中没有$contains运算符。

You can use the answer from JohnnyHK as that works. 您可以使用JohnnyHK的答案,因为它可以起作用。 The closest analogy to contains that mongo has is $in , using this your query would look like: 包含mongo的最接近类推是$in ,使用此查询,您的查询将类似于:

PersonModel.find({ favouriteFoods: { "$in" : ["sushi"]} }, ...);



#4楼

I know this topic is old, but for future people who could wonder the same question, another incredibly inefficient solution could be to do: 我知道这个话题很老,但是对于将来可能会想知道相同问题的人们,另一种效率极低的解决方案是:

PersonModel.find({$where : 'this.favouriteFoods.indexOf("sushi") != -1'});

This avoids all optimisations by MongoDB so do not use in production code. 这避免了MongoDB的所有优化,因此请勿在生产代码中使用。




#5楼

In case you need to find documents which contain NULL elements inside an array of sub-documents, I've found this query which works pretty well: 如果您需要在子文档数组中查找包含NULL元素的文档,我发现此查询非常有效:

db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}})

This query is taken from this post: MongoDb query array with null values 该查询摘自该帖子: 具有空值的MongoDb查询数组

It was a great find and it works much better than my own initial and wrong version (which turned out to work fine only for arrays with one element): 这是一个很好的发现,它比我自己的初始版本和错误版本要好得多(原来的版本只适用于具有一个元素的数组):

.find({'MyArrayOfSubDocuments': { $not: { $size: 0 } },'MyArrayOfSubDocuments._id': { $exists: false }
})



#6楼

I feel like $all would be more appropriate in this situation. 我觉得$all在这种情况下会更合适。 If you are looking for person that is into sushi you do : 如果您正在寻找喜欢寿司的人,可以这样做:

PersonModel.find({ favoriteFood : { $all : ["sushi"] }, ...})

As you might want to filter more your search, like so : 您可能希望过滤更多搜索内容,例如:

PersonModel.find({ favoriteFood : { $all : ["sushi", "bananas"] }, ...})

$in is like OR and $all like AND. $in就像OR, $all像AND。 Check this : https://docs.mongodb.com/manual/reference/operator/query/all/ 检查一下: https : //docs.mongodb.com/manual/reference/operator/query/all/


推荐阅读
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 为已有数据表添加主键:MySQL与SQL Server的最佳实践
    本文介绍了在处理一个涉及数据交互的小项目时,如何为没有主键标识的老表添加主键。具体探讨了在SQL Server中为已有数据表添加自增主键或GUID主键的两种方法,并提供了详细的SQL语句及执行效果。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • 本文介绍了一种在Win10 UWP应用中实现根据数值动态改变颜色的控件的方法。通过将椭圆的颜色与整数绑定,并利用值转换器来实现颜色的渐变效果。 ... [详细]
author-avatar
kf_zjk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有