mongodb - 在子文档中使用 db.collection.find 查询

标签 mongodb find

有没有办法使用 db.collection.find() 查询子文档中的特定值并找到匹配的那些文档。例如:

{ { '乔':{eyecolor:'棕色'}, { '玛丽':{eyecolor:'蓝色'}, ....

我想返回所有眼睛颜色为蓝色的人的名字。

最佳答案

您需要指定值的完整路径才能进行搜索:

db.people.find({ "Joe.eyecolor" : "brown" })

您不能切换到人员数组而不是您现在使用的关联数组样式,因为无法只返回匹配条件的数组元素。您可以使用 $elemMatch 返回 first 匹配项,但这不太可能是您想要的。或者,您仍然可以使用数组,但您需要在客户端代码(而不是数据库)中进一步过滤数组。

您也许可以使用聚合框架,但它无法有效地使用索引,因为您需要$unwind 整个数组,然后进行过滤、暴力破解。而如果包含的数据比较复杂,使用AF进行投影需要手动指定所有字段,就显得有点麻烦了。

为了最有效地执行您正在显示的查询,您不需要使用子文档,而是将人员作为单独的文档放置:

{ 
    name: "Joe",
    eyecolor: "brown" 
}

然后,您可以像这样进行简单的搜索:

db.people.find({eyecolor: "brown"})

关于mongodb - 在子文档中使用 db.collection.find 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249722/

相关文章:

vba - 在避免循环的范围内更改值,以提高速度

matlab - 在matlab中找出不重复的,唯一的数据对

node.js - Mongoose 不断给 _id 和 id 相同的值

mongodb - 当我尝试对文档数组执行 db.collection.save 操作时,Mongo 抛出 E11000 重复键错误

mongodb - golang mongodb 聚合中的 Transact-SQL 等价物

linux - 更改搜索目录时文件的权限

bash - 在 bash 脚本中使用查找 - 如何处理查找返回 "file or directory does not exist"的情况

mongodb - 配置和使用 mongodb 模型服务器进行单元测试

node.js - NodeJS中的密码重置

java - Selenium Webdriver - 从 li/a 查找动态 id