Javascript 子文档数组上的elemMatch搜索

Javascript 子文档数组上的elemMatch搜索,javascript,node.js,mongodb,mongodb-query,node-mongodb-native,Javascript,Node.js,Mongodb,Mongodb Query,Node Mongodb Native,如何在子文档数组中使用elemMatch进行搜索?我有一个名为ReportCollection的文档,其中包含以下元素:- /* 0 */ { "_id" : ObjectId("5507bfc435e9470c9aaaa2ac"), "owner" : ObjectId("5507bfc31e14d78e177ceebd"), "reports" : { "xReport" : [ { "name

如何在子文档数组中使用elemMatch进行搜索?我有一个名为ReportCollection的文档,其中包含以下元素:-

/* 0 */
{
    "_id" : ObjectId("5507bfc435e9470c9aaaa2ac"),
    "owner" : ObjectId("5507bfc31e14d78e177ceebd"),
    "reports" : {
        "xReport" : [ 
            {
                "name" : "xReport",
                "parameters" : {
                    "x" : {
                        "dateTime" : "2015-03-11T18:30:00.000Z",
                        "unit" : 1,
                        "value" : 102
                    }
                },
                "createdBy" : ObjectId("5507bfc31e14d78e177ceebd"),
                "modifiedBy" : ObjectId("5507bfc31e14d78e177ceebd"),
                "_id" : ObjectId("5507bfc41e14d78e177ceebf")
            }
        ]
    }
}
我得到了报告。xReport[].\u id作为搜索参数

我的以下尝试失败了:-

  db.reports.find ({ {owner: ObjectId("5507afd3d54bae3513c185cb")}, 
    { 'reports.xReport': {$elemMatch: {_id: ObjectId("5507afd3d54bae3513c185cd") }}} } )

似乎您正试图将工作放入“投影”中,而这正是您在查询中应该做的。相反,您的声明应该更像这样:

db.reports.find(
{
“所有者”:对象(“5507BFC314D78E177CEEBD”),
“reports.xReport._id”:ObjectId(“5507bfc41e14d78e177ceebf”)
},
{“reports.xReport.$”:1}
)
所以“查询”完成了匹配数组位置的工作,“投影”只在匹配中使用该位置

还要注意的是,您永远不需要与单个字段进行匹配。只有当条件中需要多个字段时,才需要使用此字段来匹配特定的“元素”

同样,这也应该出现在“query”语句中


在中,它的投影形式不能通过虚线表示法与子文档字段一起使用。

似乎您正试图将工作放入查询中应该执行的“投影”中。相反,您的声明应该更像这样:

db.reports.find(
{
“所有者”:对象(“5507BFC314D78E177CEEBD”),
“reports.xReport._id”:ObjectId(“5507bfc41e14d78e177ceebf”)
},
{“reports.xReport.$”:1}
)
所以“查询”完成了匹配数组位置的工作,“投影”只在匹配中使用该位置

还要注意的是,您永远不需要与单个字段进行匹配。只有当条件中需要多个字段时,才需要使用此字段来匹配特定的“元素”

同样,这也应该出现在“query”语句中


它的投影形式不能通过虚线表示法与子文档字段一起使用。

谢谢Niel,(实际上,在我的示例中,整个参数都是查询的一部分,但我把它弄得太复杂了,正如我正确地建议的那样,我不需要$elemMatch。@SutikshanDubey我通常认为在上下文允许的情况下,它是值得一提的,因为它与其他各种运算符一起是一个常见的误解。)(值得注意的是,
$in
$nin
等)在处理数据数组时,您需要使用这样的运算符。这不仅是为了您的利益,而且是为了在问答资源站点上,为了所有可能遇到同一问题的人的利益。友好提示您接受解决您问题的答案。您的帐户非常“轻松”关于您的问题的已接受答案。嘿,我确实将其标记为已接受,不确定,为什么没有将答案标记为已接受。(可能是我在两个浏览器窗口中打开了此页…。我再次尝试,希望它仍能被接受。谢谢伙计(在您第一次评论之后,我还查看了我的另一个问题:)。谢谢您Niel,(实际上,在我的示例中,整个参数都是查询的一部分,但我把它弄得太复杂了,正如我正确地建议的那样,我不需要$elemMatch。@SutikshanDubey我通常认为在上下文允许的情况下,它是值得一提的,因为它与其他各种运算符一起是一个常见的误解。)(值得注意的是,
$in
$nin
等)在处理数据数组时,您需要使用这样的运算符。这不仅是为了您的利益,而且是为了在问答资源站点上,为了所有可能遇到同一问题的人的利益。友好提示您接受解决您问题的答案。您的帐户非常“轻松”关于您的问题的已接受答案。嘿,我确实将其标记为已接受,不确定,为什么不将答案标记为已接受。(可能是我在两个浏览器窗口中打开了此页…。我重试了,希望它仍能被接受。谢谢,伙计(在您第一次评论之后,我还查看了我的另一个问题:))。