mongodb如何仅选择所有阵列';s值与数据一致
我有两个数据mongodb如何仅选择所有阵列';s值与数据一致,mongodb,mongodb-query,Mongodb,Mongodb Query,我有两个数据 {"_id" : ObjectId("5e2564e7fc4adf6813df71fa"), "product_nums" : [ { "product_number" : "123123qwedf2", "product_status" : "F" } ]} {"_id" : ObjectId("5e2570d20b83102cad7adf04"), "product_nums" : [ { "produ
{"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]}
{"_id" : ObjectId("5e2570d20b83102cad7adf04"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "S"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]}
我只想得到第一个数据。按筛选产品搜索时\u status=“F”
这是我的疑问:
db.getCollection('product_number').find({"product_nums" : {"$elemMatch" : {"product_status": "F"}}})
但该查询也会返回第二个数据
我怎样才能得到这个呢
{
"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]}
您可以尝试以下方法:
db.getCollection('product_number').aggregate([{
$addFields: {
data: { /** filter returns [] if input array has only F's */
$filter:
{
input: '$product_nums.product_status', /** $product_nums.product_status = ['F'], ['S','F'] */
as: "each",
cond: { $ne: ['$$each', 'F'] }
}
}
}
}, { $match: { data: [] } }, { $project: { data: 0 } }])
收集数据:
/* 1 */
{
"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 2 */
{
"_id" : ObjectId("5e2570d20b83102cad7adf04"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "S"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 3 */
{
"_id" : ObjectId("5e291efcd02e05b694d18244"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "C"
}
]
}
/* 4 */
{
"_id" : ObjectId("5e2f93bad02e05b694989468"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "F"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 1 */
{
"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 2 */
{
"_id" : ObjectId("5e2f93bad02e05b694989468"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "F"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
结果:
/* 1 */
{
"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 2 */
{
"_id" : ObjectId("5e2570d20b83102cad7adf04"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "S"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 3 */
{
"_id" : ObjectId("5e291efcd02e05b694d18244"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "C"
}
]
}
/* 4 */
{
"_id" : ObjectId("5e2f93bad02e05b694989468"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "F"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 1 */
{
"_id" : ObjectId("5e2564e7fc4adf6813df71fa"),
"product_nums" : [
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
/* 2 */
{
"_id" : ObjectId("5e2f93bad02e05b694989468"),
"product_nums" : [
{
"product_number" : "123123qwedf",
"product_status" : "F"
},
{
"product_number" : "123123qwedf2",
"product_status" : "F"
}
]
}
下面是一个关于如何查询特定数组元素的示例:。嘿@srinivasy,我想知道,是否可以根据产品状态使用投影来限制_id和产品_nums值。虽然您的解决方案围绕答案展开,但如果存在多个键值对,并且只有他需要这2个元素,该怎么办。如果您希望对此查询进行投影。这很有意义。@Balaji.J.B:即使文档有更多字段,这个查询也只会返回
\u id
&product\u nums
,以防他需要剩余字段,他需要在投影中指定所有需要的字段!!感谢您的详细解释和样品。我试过了。但我得到了我想要的不同结果。我的意思是,我只想在您的收集数据中获取Objectid(5e2564e7fc4adf6813df71fa)。因为ObjectId(“5e2570d20b83102cad7adf04”)具有“S”产品_状态。对不起,我的英语解释不好。修复前的答案也很有帮助!!它解决了我的另一个问题。非常感谢。