MongoDB:使用$ position运算符进行查询

Joh*_*sma 7 querying mongodb

我有一个条目集合看起来像:

{
    "userid": 1, 
    "contents": [ 
            { "tag": "whatever", "value": 100 }, 
            {"tag": "whatever2", "value": 110 } 
    ] 
}
Run Code Online (Sandbox Code Playgroud)

我希望能够查询该集合并仅返回数组的一部分:与查询匹配的部分.我正在尝试使用$ position运算符来执行此操作,但到目前为止它还没有工作.

更准确地说,我想做的是:

collection.find({'contents.tag':"whatever"},{'contents.$.value':1})
Run Code Online (Sandbox Code Playgroud)

因此,我希望只有与匹配查询的数组中的条目对应的值,在这种情况下为100.

你知道什么是错的吗?我在想,也许$运算符只能用于更新而不能用于查询.有谁知道吗?

谢谢 !

Rya*_*yan 8

是的,你是对的 - 位置运算符用于更新对象.

现在的解决方案是返回数组,在应用程序中拉出字段.

此功能有一个开放的增强请求(在查询中):

https://jira.mongodb.org/browse/SERVER-828

有关位置运算符的更多信息,请参阅:

http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator


Aid*_*ina 8

您正在寻找的是$ elemMatch运算符.

  • 您能否详细说明一下在这种情况下如何使用 $elemMatch 来仅返回数组中匹配对象的一部分? (2认同)