数据:
[{
"shop_ID" : "ABCD",
"plan" : 2,
"planType" : 2,
"goods_id" : "9612",
"category" : "1",
"keywords" : [
{
"keyword" : "lianyiqun",
"price" : 3.12,
"score" : 9
},
{
"keyword" : "nvzhuang",
"price" : 6.57,
"score" : 6
},
{
"keyword" : "chunzhuang",
"price" : 5.55,
"score" : 8
}
]
},
{
"shop_ID" : "ABCD",
"plan" : 2,
"planType" : 2,
"goods_id" : "5078",
"category" : "1",
"keywords" : [
{
"keyword" : "lianyiqun",
"price" : 9.26,
"score" : 8
},
{
"keyword" : "nvzhuang",
"price" : 4.52,
"score" : 9
}
]
}]
我使用过命令查询:
db.test.find({" keywords":{$ elemMatch:{"得分":{" $ gte":8}}}}})
结果不对,它是所有文件。
然后,使用该命令 db.test.find({"关键字"得分":{" $ GTE":8}})
结果是一样的。
我希望第一个文档的查询结果如下:
{
"shop_ID" : "ABCD",
"plan" : 2,
"planType" : 2,
"goods_id" : "9612",
"category" : "1",
"keywords" : [
{
"keyword" : "lianyiqun",
"price" : 3.12,
"score" : 9
},
{
"keyword" : "chunzhuang",
"price" : 5.55,
"score" : 8
}
]
},
如何查询内部文件?
答案 0 :(得分:0)
有一个$elemMatch投影运算符,它将从每个数组中返回符合条件的ONE元素:
db.test.find( { } ,
{ keywords: { $elemMatch: { score: { $gte: 8 } } } }
)
要使用得分> = 8返回子文档中的所有元素,可以使用aggregation framework:
db.test.aggregate ( [ { $unwind: "$keywords" },
{ $match: { "keywords.score" : { $gte: 8 } } }
] )
此致