2013-04-11 31 views
1

我有以下文件在我的收藏獲取使用MongoDB中找到

{ 
_id: ObjectId("5166fefbc482c31052000002"), 
contact: [ 
    { 
     home: 7735734105 
    }, 
    { 
     office: 9583866301 
    } 
], 
user_name: "moti", 
reportsTo: "bikram", 
technology: [ 
    { 
     name: ".net", 
     rating: 5 
    }, 
    { 
     name: "JavaScript", 
     rating: 2 
    } 
], 
project: [ 
    "Agile School", 
    "Draftmate" 
], 
type: "developer", 
email: "[email protected]" 

} 和

{ 
_id: ObjectId("5166fe90c482c31052000001"), 
contact: [ 
    { 
     home: 7735734103 
    }, 
    { 
     office: 9583866901 
    } 
], 
user_name: "ganesh", 
reportsTo: "bikram", 
technology: [ 
    { 
     name: "JavaScript", 
     rating: 3 
    }, 
    { 
     name: ".net", 
     rating: 4 
    } 
], 
project: [ 
    "SLBC", 
    "Draftmate" 
], 
type: "developer", 
email: "[email protected]" 

}

現在我需要找到誰認識的人的評價所需的輸出只有JavaScript.Currently if I run

db.users.find( { technology: { $elemMatch: { name: 'JavaScript' } } },{user_name:1,'technology.name':1,_id:0} ).pretty()

我得到所有技術的名稱(.net & JavaScript)及其相應的評級。我只需要用戶名,以及它們在JavaScript中的各自評分。我需要使用任何聚合技術嗎?

+0

嘗試運行以下:db.users.find({技術:{$ elemMatch:{名稱: 'JavaScript的'}}},{USER_NAME:1 ,'technology。$。name':1,_id:0}) – 2013-04-11 20:45:38

回答

2

positional operator '$'可用於限制查詢結果到第一個匹配元素。要在查詢中使用上面,你會改變爲:

db.users.find({ technology: { $elemMatch: { name: 'JavaScript' } } },{user_name:1,'technology.$.name':1,_id:0}) 
+0

謝謝詹姆斯。再一個查詢。如何將輸出顯示爲「Ganesh的JavaScript評分爲3」? – Janmejay 2013-04-11 20:55:34

+1

var result = db.users.findOne({technology:{$ elemMatch:{name:'JavaScript'}}},{user_name:1,'technology。$。name':1,_id:0}) – 2013-04-11 21:09:20

+0

print result.user_name +「具有」+ result.technology [0] .name +「rating of」+ result.technology [0] .rating) – 2013-04-11 21:10:27