2013-03-22 38 views
0

查询的数据:如何在MongoDB中

[{   
        "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({ “关键词”:{$ 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

有一个$elemMatch投影算将从每阵列返回一个元素符合您的条件:

db.test.find({ } , 
       { keywords: { $elemMatch: { score: { $gte: 8 } } } } 
      ) 

要比分> = 8返回的所有元素在您子,您可以使用aggregation framework

db.test.aggregate ([ { $unwind: "$keywords" }, 
         { $match: { "keywords.score" : { $gte: 8 } } } 
        ]) 

问候

+0

谢谢你,凯。但是我有另一个要求,如果我想在mapreduce操作中使用它,但是db.collection.mapReduce()函数不支持聚合。如果我这样写:db.test.mapReduce( mapFunction, reduceFunction, {out:“map_reduce_test”, query:[{$ unwind:“$ keywords”},{$ match:{“keywords.score” :{$ GTE:8}}}], } ),输出是:地图减少失败:{ \t “ERRMSG”: “异常:查询具有为空或对象”, \t “代码”: 13608, \t“ok”:0 – normalnotebook 2013-03-26 11:07:56