问题描述
我正在尝试使用 $elemMatch
在数组中查找对象.我将以下数据导入到名为 trails
的集合中:
I'm trying to use $elemMatch
to find an object in an array. I imported the following data into a collection named 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 文档中的语法 进行以下查询:
I'm using the syntax from the MongoDB documentation to make the following query:
db.trails.find( { "Copper": { $elemMatch: { "name" : "Spaulding Bowl" } } } )
我也尝试过在键周围不加引号的情况下对其进行格式化:
I have also tried formating it without quotations around the keys:
db.trails.find( { Copper: { $elemMatch: { name : "Spaulding Bowl" } } } )
不是只返回一个匹配的元素,而是返回整个对象数组.是否有我遗漏的语法错误?感谢所有提示.
Instead of returning just one matching element, both return the entire array of objects. Is there a syntax error I'm missing? All tips are appreciated.
推荐答案
$elemmatch(query) 当至少有一行符合查询条件时,返回数组中的所有行.
$elemmatch(query) returns all rows in a array when there is atleast one row matching the query criteria.
$elemMatch(projection) 用作投影时仅返回所有匹配行的第一行.
$elemMatch(projection) returns only the first row of all the matching rows when used as projection.
您的案例不需要 elemMatch,因为它只是单一标准.
You don't need elemMatch for your case as it is only single criteria.
db.trails.find({"Copper.name": { "Spaulding Bowl" } })
尝试如下使用 elemMatch 投影变化.
Try as below which uses the elemMatch projection variation.
db.trails.find({}, {"Copper": { $elemMatch: { "name" : "Spaulding Bowl" } } } )
这篇关于MongoDB:$elemMatch的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!