MongoDB:$ elemMatch

时间:2016-12-11 15:52:41

标签: mongodb

我正在尝试使用$elemMatch来查找数组中的对象。我将以下数据导入名为trails的集合:

{ "Copper" : [
        {"name" : "Spaulding Bowl", "level" : "Extreme Terain", "location" : "East Side"},
        {"name" : "Resolution Bowl", "level" : "Double Black", "location" : "East Side"},
        {"name" : "Black Bear Glade", "level" : "Double Black", "location" : "East Side"},
        {"name" : "Free Fall Glade", "level" : "Double Black", "location" : "East Side"}
 ]
}

我正在使用MongoDB documentation中的语法进行以下查询:

db.trails.find( { "Copper": { $elemMatch: { "name" : "Spaulding Bowl" } }  } )

我也试过在键盘周围没有引号的情况下形成它:

db.trails.find( { Copper: { $elemMatch: { name : "Spaulding Bowl" } }  } )

不是只返回一个匹配元素,而是返回整个对象数组。我缺少语法错误吗?所有提示都表示赞赏。

1 个答案:

答案 0 :(得分:1)

当有至少一行符合查询条件时,

$elemmatch(query) 会返回数组中的所有行。

$elemMatch(projection) 在用作投影时仅返回所有匹配行的第一行。

您的案件不需要elemMatch,因为它只是单一标准。

unique:table_name,column_name,except,idColumn

尝试如下使用elemMatch投影变体。

db.trails.find({"Copper.name": { "Spaulding Bowl" } })