2011-03-14 102 views
29

我想要mongo分貝,我想問是否有可能只獲得文檔的特定部分?Mongodb獲取文檔的特定部分

{ 
    "name" : "MongoDB", 
    "info" : { 
       x : 203, 
       y : 102 
      } 
} 

而且我想只有info內容。

最近我發現的是db.cellection.find({},{info:1 })但這個返回信息:內容和我想返回只有的內容。

可能嗎?怎麼樣?

+0

我也有興趣在該解決方案爲我的文檔+大小5MB,我只有特定的領域之後。不,我無法將特定字段保存在單獨的表格中,因爲我在一個文檔中存儲了多個字段(+ 10k字段) – 2016-08-04 10:46:51

回答

26

你可以做

db.collection.find({},{'info.x':1, 'info.y':1}) 

但是這意味着列出每個和投影的信息對象的每一個項目 - 這可能是也可能不是你要找的內容。

11

不,你不能只返回x/y的值;即使限制字段外部結構仍然返回。

有關更多信息,請參閱。

13

您可以使用distinct()功能,通過以下類似:

db.collection.distinct("info", {info : {$exists : true}}) 
+2

您知道爲什麼這是0嗎?這聽起來像是完全正確的答案,而排名前2意味着海報想做的事情是不可能的。 – michaelAdam 2015-07-07 16:09:49

+0

儘管它具有「獨特」關鍵字,但它並不像mysql那樣選擇不同的項目,它只會選擇您提供的「獨特」字段。所以這個答案產生了更好的結果,然後其他2個答案。 – WallTearer 2015-10-07 15:23:14

1

MongoDb docs

閱讀本該

,如果不指定推算,find()方法返回的所有領域與查詢匹配的所有文檔。

0

您可以使用aggregation framework

  1. $匹配階段(可選)來篩選結果。
  2. $項目階段,選擇字段,

    db.getCollection('yourCollection').aggregate([ {$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}}, {$project:{_id:0, "x":"$info.x", "y":"$info.y"}} ])