gpt4 book ai didi

javascript - 对子文档数组进行 elemMatch 搜索

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:12 26 4
gpt4 key购买 nike

如何使用 elemMatch 对 SubDocument 数组进行搜索?我有一个名为 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")
}
]
}
}

我得到 reports.xReport[]._id 作为搜索参数。

我的以下尝试失败了:-

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

最佳答案

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

db.reports.find(
{
"owner": ObjectId("5507bfc31e14d78e177ceebd"),
"reports.xReport._id": ObjectId("5507bfc41e14d78e177ceebf")
},
{ "reports.xReport.$": 1 }
)

因此,“查询”执行匹配数组位置的工作,而“投影”仅在匹配中使用该位置。

另请注意,您永远不会真正需要 $elemMatch与单个字段进行匹配。只有当条件中需要多个字段时,才需要使用它来匹配特定的“元素”。

出于同样的原因,它也应该出现在“query”语句中。

$elemMatch其投影形式不能通过点分符号与子文档字段一起使用。

关于javascript - 对子文档数组进行 elemMatch 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com