2013-03-22 42 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