mongodb - 如何在 mongoDb 中进行过滤?
问题描述
我有一个收藏品,如下所示
"role" : [
{
"role_id" : "599adabbef17f85afbcee00d",
"earn" : {
"5943c3f7c74b036a883efaf0" : "E2",
"5943c46ec74b036a883efaf1" : "E0",
"594a0b08c74b030a2ae33cce" : "E2",
"5943c3f7c74b036a883efaf0" : "E5",
"5943c46ec74b036a883efaf1" : "E0",
"594a0b08c74b030a2ae33cce" : "E4"
}
}
]
我只需要获取没有“E0”的收入值。
"5943c3f7c74b036a883efaf0" : "E2",
"594a0b08c74b030a2ae33cce" : "E2",
"5943c3f7c74b036a883efaf0" : "E5",
"594a0b08c74b030a2ae33cce" : "E4"
解决方案
您可以按如下方式使用聚合查询
db.roles.aggregate([
{$unwind: "$role" },
{$project : { earn : { $objectToArray: "$role.earn" }}},
{$unwind : "$earn" },
{$match: { "earn.v" : { $ne : "E0" }}},
]);
在以下集合上执行时
> db.roles.find().pretty()
{
"_id" : ObjectId("5b8d4db5217b959d85f79899"),
"role" : [
{
"role_id" : "599adabbef17f85afbcee00d",
"earn" : {
"5943c3f7c74b036a883efaf0" : "E5",
"5943c46ec74b036a883efaf1" : "E0",
"594a0b08c74b030a2ae33cce" : "E4"
}
}
]
}
您将获得以下输出
> db.roles.aggregate([
... {$unwind: "$role" },
... {$project : { earn : { $objectToArray: "$role.earn" }}},
... {$unwind : "$earn" },
... {$match: { "earn.v" : { $ne : "E0" }}},
... ]);
{ "_id" : ObjectId("5b8d4db5217b959d85f79899"), "earn" : { "k" : "5943c3f7c74b036a883efaf0", "v" : "E5" } }
{ "_id" : ObjectId("5b8d4db5217b959d85f79899"), "earn" : { "k" : "594a0b08c74b030a2ae33cce", "v" : "E4" } }
推荐阅读
- logging - RabbitMQ 更改日志目录
- python-3.x - 压缩重复循环
- flutter - 如何在颤动的两个屏幕之间导航数据?
- python - 具有多个变量的 Arduino inputString.indexOf
- amazon-web-services - Logstash AWS 解决代码 403 尝试重新连接
- powershell - 过滤和替换 Invoke-CIMMethod 的结果
- r - R中分布的MLE:fitdistrplus(SGT分布),我该怎么做?
- javascript - 如何使用 GO 自动生成 JavaScript 代码
- c# - 复制 System.Data 的内容。要列出的数据表
使用 Automapper C# - python - 在 Tensorflow 中建模 DCGAN 的损失