如何在mongoDb文档中查找特定的数组元素,并使用范围进行查询和筛选?
我有一个以以下格式存储文档的集合:如何在mongoDb文档中查找特定的数组元素,并使用范围进行查询和筛选?,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个以以下格式存储文档的集合: /* 1 */ { "_id" : ObjectId("5cc1a108c5475b9e91bb7830"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5.0 }, { "warehouse" : "C",
/* 1 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7830"),
"item" : "journal",
"instock" : [
{
"warehouse" : "A",
"qty" : 5.0
},
{
"warehouse" : "C",
"qty" : 15.0
}
]
}
/* 2 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7831"),
"item" : "notebook",
"instock" : [
{
"warehouse" : "C",
"qty" : 5.0
}
]
}
/* 3 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7832"),
"item" : "paper",
"instock" : [
{
"warehouse" : "A",
"qty" : 60.0
},
{
"warehouse" : "B",
"qty" : 15.0
}
]
}
/* 4 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7833"),
"item" : "planner",
"instock" : [
{
"warehouse" : "A",
"qty" : 40.0
},
{
"warehouse" : "B",
"qty" : 5.0
}
]
}
/* 5 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7834"),
"item" : "postcard",
"instock" : [
{
"warehouse" : "B",
"qty" : 15.0
},
{
"warehouse" : "C",
"qty" : 35.0
},
{
"warehouse" : "M",
"qty" : 50.0
}
]
}
/* 6 */
{
"_id" : ObjectId("5cc1a16ea794ebd5fc278172"),
"item" : "dig",
"instock" : [
{
"warehouse" : "A",
"qty" : 5.0
}
]
}
我想找到数量大于指定值且小于其他指定值的特定单据数组
例如,我希望项目“明信片”和instock值大于10且小于40,因此它返回明信片的文档,其中instock数组仅包含一个匹配的元素,就像输出一样:
/* 1 */
{
"_id" : ObjectId("5cc1a108c5475b9e91bb7834"),
"item" : "postcard",
"instock" : [
{
"warehouse" : "B",
"qty" : 15.0
},
{
"warehouse" : "C",
"qty" : 35.0
}
]
}
可用于文档级筛选,并将条件应用于数组:
db.collection.aggregate([
{
$match: { item: "postcard" }
},
{
$addFields: {
instock: {
$filter: {
input: "$instock",
cond: {
$and: [
{ $gt: [ "$$this.qty", 10 ] },
{ $lt: [ "$$this.qty", 30 ] }
]
}
}
}
}
}
])
我认为您提到的输出不正确,根据您的问题,它应该只返回“仓库”的一个元素:“B”是的,以前输出不正确,但我现在编辑了我的问题。