在使用 mongoDB 或大多数编程语言处理对象时,主要是通过 . 表示法。因此,如果您想检查 2 是否作为值存在于 var3 对象的键中,那么您需要指定 'var3.SpecifickeyNo' : {$in :[2]},但是由于您需要直接检查 var3 上的所有键而不指定键编号,那么请试试这个:
db.YourCollectionName.aggregate([
{ $addFields: { "mergeAsArray": { $objectToArray: "$var3" } } },
{
$addFields:
{
mergeAsArray:
{
$reduce: {
input: '$mergeAsArray.v',
initialValue: [],
in: { $concatArrays: ["$$value", "$$this"] }
}
}
} // values of all keys in var3 object are merged into a field mergeAsArray
}, { $match: { 'mergeAsArray': { $in: [2] } } }, { $project: { mergeAsArray: 0 } }])
参考: $reduce , $concatArrays , $addFields
收藏:
/* 1 */
{
"_id" : ObjectId("5dfd095e3cd30d038bb4f875"),
"var1" : "atr1",
"var2" : "atr2",
"var3" : {
"key1" : [
1.0
],
"key2" : [
2.0,
4.0,
6.0
]
}
}
/* 2 */
{
"_id" : ObjectId("5dfd095e3cd30d038bb4f876"),
"var1" : "atr1",
"var2" : "atr2",
"var3" : {
"key1" : [
2.0,
3.0
],
"key2" : [
4.0
]
}
}
/* 3 */
{
"_id" : ObjectId("5dfd095e3cd30d038bb4f877"),
"var1" : "atr1",
"var2" : "atr2",
"var3" : {
"key1" : [
3.0
],
"key2" : [
4.0,
5.0,
6.0
]
}
}
结果:
/* 1 */
{
"_id" : ObjectId("5dfd095e3cd30d038bb4f875"),
"var1" : "atr1",
"var2" : "atr2",
"var3" : {
"key1" : [
1.0
],
"key2" : [
2.0,
4.0,
6.0
]
}
}
/* 2 */
{
"_id" : ObjectId("5dfd095e3cd30d038bb4f876"),
"var1" : "atr1",
"var2" : "atr2",
"var3" : {
"key1" : [
2.0,
3.0
],
"key2" : [
4.0
]
}
}
根据上述输入值,2 与第一个文档中的 var3.key2 和第二个文档中的 var3.key1 匹配。