mongodb - 选择数组的所有对象都具有某些值的文档
问题描述
晚上好,我在浏览 MongoDB 文档和理解如何执行一个简单的查询时遇到了麻烦,否则看起来像什么。
让我们假设我有以下文件:
{
"user_name": "john doe"
"friendsList": [
{"name": "maria"},
{"name": "maria"},
{"name": "maria"}
]
}
我想通过"user_name": "john doe"
(它是唯一的)检索文档,但前提是friendsList
数组中的所有对象都具有name = maria
. 换句话说,上面的 Document 将被返回,但下面表示的将导致no matches
.
{
"user_name": "john doe"
"friendsList": [
{"name": "maria"},
{"name": "stryx"},
{"name": "maria"}
]
}
我曾尝试使用$all
查询选择器等,但所有这些都会导致数组中至少有一个对象匹配的行为。
解决方案
尝试$elemMatch
与$not
运营商,
$elemMatch
withname
不等于maria
和否定检查使用$not
elemMatch 结果这意味着所有元素都应包含maria
名称$ne
忽略空friendList
,这是可选的
db.collection.find({
user_name: "john doe",
"friendsList": {
$ne: [],
$not: {
$elemMatch: {
name: { $ne: "maria" }
}
}
}
})
推荐阅读
- mysql - 数据适合行时的 VARCHAR 与 TEXT 性能
- php - ZipArchive 忽略放在 .zip 文件中的文件的 date_default_timezone_set
- android - 错误:程序类型已存在:android.support.v4.app.INotificationSideChannel
- android - 如何在 Nativescript Vue WebView 中启用 LocalStorage?
- android - Logcat 仅捕获应用程序日志,关闭开发人员选项
- python - 为什么调用 next() 时 StratifiedShuffleSplit 返回完整数据集的训练/测试索引?
- schema.org - SDTT 抛出错误,即发布者需要徽标的 url
- python - 浮点精度仍然应该给出正确的结果
- c# - Azure AD 使用用户名/密码从 API 进行身份验证 - 没有 UI,有示例吗?
- gitlab - 您可以使用 Merge to Upstream 作为触发器自动推送到子树(GitLab-CI)吗?