Mongo 查询以从集合数组返回特定值

Mongo query to return specific values from collections array

本文关键字:返回 数组 集合 查询 Mongo      更新时间:2023-09-26

我有以下名为结果的集合。

_id                 "9FK5k755ueAYdfip3"
    createdAt       Date {Sat Mar 12 2016 19:58:46 GMT+0100 (CET)}
    results         [Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:01:29  backu...ox file was not found. ",  time="02/09/15 13:01:29"}, 
                    Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:01:29  backu...ox file was not found. ",  time="02/09/15 13:01:29"},
                    Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:22:42  backu...ox file was not found. ",  time="02/09/15 13:22:42"}, 
                    432 more...]
    results:
    0   Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:01:29  backu...ox file was not found. ",  time="02/09/15 13:01:29"}  
    1   Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:01:29  backu...ox file was not found. ",  time="02/09/15 13:01:29"}   
    2   Object { errorId="uX6byeiuGjRNXTj6s",  error="02/09/15 13:22:42  backu...ox file was not found. ",  time="02/09/15 13:22:42"}
    ...
    14    Object { errorId="5vfLjdbaQLgbuCiNZ",  error="02/09/15 16:04:10  backu...minated with an error. ",  time="02/09/15 16:04:10"}   
    15    Object { errorId="5vfLjdbaQLgbuCiNZ",  error="02/09/15 16:04:10  backu...minated with an error. ",  time="02/09/15 16:04:10"}   
    16    Object { errorId="5vfLjdbaQLgbuCiNZ",  error="02/09/15 16:04:10  backu...minated with an error. ",  time="02/09/15 16:04:10"}
    ...
    183    Object { errorId="uX6byeiuGjRNXTj6s",  error="03/13/15 13:36:24  backu...ox file was not found. ",  time="03/13/15 13:36:24"}
    184    Object { errorId="uX6byeiuGjRNXTj6s",  error="03/13/15 13:42:39  backu...ox file was not found. ",  time="03/13/15 13:42:39"} 
    185    Object { errorId="uX6byeiuGjRNXTj6s",  error="03/13/15 13:42:40  backu...ox file was not found. ",  time="03/13/15 13:42:40"}

我需要查询,它将返回数组结果中特定错误 Id 的所有文档。

我尝试了不同的查询,但没有任何效果。

例如:

    Results.find ({ results: { $elemMatch : { errorId: 'uX6byeiuGjRNXTj6s'}}})
    Results.find ({ results: { $elemMatch : { Key: 'errorId', 'errorId': 'uX6byeiuGjRNXTj6s'}}}).fetch()
    Results.find ({'results.errorId.$' : 'uX6byeiuGjRNXTj6s'}).fetch()

请帮忙。

谢谢!!!

请尝试通过aggregation

Results.aggregate([{$unwind: '$results'},
                   {$match: {'results.errorId': 'uX6byeiuGjRNXTj6s'}}])

您可以使用$elemMatch .Mongo documentaton 提供了一些例子。但对于您的案例,请使用:

{ results: { $elemMatch: { errorId: "xyz"} } }

如果这不起作用,根据 mongo 文档,您可以使用:

{ "results.errorId": "xyz" }

我尝试从浏览器控制台运行查询,并得到以下结果:

    Results.find({ results: { $elemMatch: { errorId: "uX6byeiuGjRNXTj6s"} } }).fetch()
    [Object { _id="9FK5k755ueAYdfip3",  results=[435],  createdAt=Date}]
    Results.find({ results: { $elemMatch: { "results.errorId": "uX6byeiuGjRNXTj6s"} } }).fetch()
    []
    Results.aggregate([{$unwind: '$results'},{$match: {'results.errorId': 'uX6byeiuGjRNXTj6s'}}]).fetch()
    TypeError: Results.aggregate is not a function

    ...gregate([{$unwind: '$results'},{$match: {'results.errorId': 'uX6byeiuGjRNXTj6s'}...

第一个查询返回所有 id,而不仅仅是"uX6byeiuGjRNXTj6s"。其他两个查询不起作用。然后我尝试直接从数据库运行它们(流星蒙戈),结果如下。

     db.results.find({ results: { $elemMatch: { errorId: "uX6byeiuGjRNXTj6s"} } })
      - returned ALL ids
     db.results.find({ results: { $elemMatch: { "results.errorId": "uX6byeiuGjRNXTj6s"} } })
     - returned empty
     meteor:PRIMARY> db.results.aggregate([{$unwind: '$results'},{$match: {'results.errorId': 'uX6byeiuGjRNXTj6s'}}])
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:01:29  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:01:29" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:01:29  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:01:29" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:22:42  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:22:42" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:22:43  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:22:43" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:49:33  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:49:33" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 13:49:34  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 13:49:34" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 14:02:22  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 14:02:22" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 14:02:22  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 14:02:22" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 14:30:41  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 14:30:41" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 14:30:41  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 14:30:41" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 15:46:41  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 15:46:41" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/09/15 15:46:42  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/09/15 15:46:42" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:26:24  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:26:24" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:26:24  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:26:24" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:40:47  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:40:47" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:40:48  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:40:48" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:47:49  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:47:49" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 15:47:49  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 15:47:49" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 16:08:38  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 16:08:38" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    { "_id" : "9FK5k755ueAYdfip3", "results" : { "errorId" : "uX6byeiuGjRNXTj6s", "error" : "02/10/15 16:08:38  backup.swatycomet.lan nsrd Error encountered while re-signing lockbox 'D:''EMC''Networker''nsr''lockbox''backup.comet.si''clb.lb': The lockbox file was not found. ", "time" : "02/10/15 16:08:38" }, "createdAt" : ISODate("2016-03-12T18:58:46.967Z") }
    Type "it" for more

所以这里的第三个查询返回了我需要的东西。然后我尝试在我的流星代码中运行该查询:

 console.log(Results.aggregate([{$unwind: '$results'},{$match: {'results.errorId': 'uX6byeiuGjRNXTj6s'}}]));

但得到的是低于错误而不是结果。

模板帮助程序中的异常:.errors@http://localhost:3000/app/client/templates/results/results.js?951539bd4f24742e5d7a64530c2463bfe41fde91:33:21bindDataContext/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2986:14

我做错了什么?