gpt4 book ai didi

mongodb - 按数组中的字段值过滤文档,Mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:00:49 24 4
gpt4 key购买 nike

收藏:

[{
_id: 'Foo',
plugs: [
{ type: 'CE', code: 12 },
{ type: 'SH': code: 34 }
]
},{
_id: 'Bar',
plugs: [
{ type: 'T2', code: 23 },
{ type: 'T2': code: 43 }
]
}]

在插头数组中可能有相同类型的条目。当我进行聚合时,我想按插头类型过滤文档。例如。仅返回包含 T2 类型插头的文档。我怎样才能在 mongodb 中做到这一点?我知道 $in 查询,但这只适用于一个简单的值数组。

最佳答案

当预期只有一个匹配项时,基于普通 .find() 的投影效果很好,但聚合框架目前是唯一将从数组返回“多个”结果的东西:

db.collection.aggregate([
// Still makes sense to "filter" the documents
{ "$match": { "plugs.type": "T2" } },
{ "$unwind": "$plugs" },
// This actually "filters" the array content
{ "$match": { "plugs.type": "T2" } },
{ "$group": {
"_id": "$_id",
"plugs": { "$push": "$plugs" }
}}
])

或者即使使用 MongoDB 2.6 或更高版本,您也可以在“设置”约束下使用“唯一”条目来执行此操作:

db.collection.aggregate([
{ "$match": { "plugs.type": "T2" } },
{ "$project": {
"plugs": {
"$setDiffernce": [
{ "$map": {
"input": "$plugs",
"as": "el",
"in": {
"$cond": [
{ "$eq": [ "$$el.type", "T2" ] },
"$$el",
false
]
}
}},
[false]
]
}
}}
])

但实际上你只是在谈论“文档匹配”而不是“元素过滤”,所以这里的聚合框架是大材小用。只需匹配文档:

db.collection.find({ "plugs.type": "T2" })

这只会返回至少有一个元素符合条件的“文档”。这是对查询模式如何在 MongoDB 中实际工作的基本理解的一部分。

这里的基类型使用"dot notation"用于指定文档标识的“部分”。这又是 MongoDB 查询如何工作的基本部分。

关于mongodb - 按数组中的字段值过滤文档,Mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com