1

我的收藏中有以下文件

{
_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: "motiranjan.pradhan@ajatus.co.in"

} 和

{
_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: "ganesh.patra@ajatus.co.in"

}

现在我需要找到只知道 JavaScript 的人的评分。目前如果我运行

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

我正在获取所有技术(.net 和 JavaScript)的名称及其相应的评级。我只需要用户名,以及他们各自在 JavaScript 中的评级。我需要使用任何聚合技术吗?

4

1 回答 1

2

位置运算符“ $”可用于将查询结果限制为第一个匹配元素。要在上面的查询中使用,您可以将其更改为:

db.users.find( { technology: { $elemMatch: { name: 'JavaScript' } } },{user_name:1,'technology.$.name':1,_id:0} ) 
于 2013-04-11T20:49:10.157 回答