MongoDB查询文档中的特定字段会返回空文档
对于每个GSM用户,我在服务集合中都有一个文档,我查询的部分如下。由于文档很长,我不得不省略文档的部分并将其分为两个部分,我试图获取documentVerifiedDate,其中documentPurpose和serviceNumber等于特定值:MongoDB查询文档中的特定字段会返回空文档,mongodb,Mongodb,对于每个GSM用户,我在服务集合中都有一个文档,我查询的部分如下。由于文档很长,我不得不省略文档的部分并将其分为两个部分,我试图获取documentVerifiedDate,其中documentPurpose和serviceNumber等于特定值: { "_id": ObjectId("59abee12e4b044ce2d6001b6"), "service": { "serviceRequestId": "1335102", "serviceIndex": "S0",
{
"_id": ObjectId("59abee12e4b044ce2d6001b6"),
"service": {
"serviceRequestId": "1335102",
"serviceIndex": "S0",
"accountIndex": "A0",
"serviceUser": {
"isServiceUserSameAsCustomer": "Y",
"isHolder": "N",
"isPayer": "N",
"profileDetails": {
"identificationDetails": {
"identificationDetail": [{
"idType": {
"masterCode": "PASS"
},
"documentPurpose": {
"masterCode": "POID"
},
"idNumber": "9339904299",
"isReceived": "Y",
"isVerified": "Y",
"documentReceivedDate": ISODate("2017-09-05T08:13:25.000+0000"),
"DMSReferenceNo": "85449499",
"documentVerifiedDate": ISODate("2017-09-05T08:13:25.000+0000")
},
{
"idType": {
"masterCode": "REGFORM"
},
"documentPurpose": {
"masterCode": "REGFORM"
},
"isUploaded": "Y",
"isReceived": "Y",
"isVerified": "Y",
"documentUploadedDate": ISODate("2017-09-05T08:13:25.000+0000"),
"DMSReferenceNo": "85449499",
"documentReceivedDate": ISODate("2017-09-05T08:13:25.000+0000"),
"documentVerifiedDate": ISODate("2017-09-05T08:13:25.000+0000")
},
{
"idType": {
"masterCode": "MMS"
},
"documentPurpose": {
"masterCode": "MMS"
},
"isUploaded": "Y",
"isReceived": "Y",
"isVerified": "Y",
"documentUploadedDate": ISODate("2017-09-05T08:13:25.000+0000"),
"DMSReferenceNo": "85449499",
"documentReceivedDate": ISODate("2017-09-05T08:13:25.000+0000"),
"documentVerifiedDate": ISODate("2017-09-05T08:13:25.000+0000")
}
]
},
而且:
"serviceDetails" : {
"serviceNumberCategory" : {
"masterCode" : "NORML"
},
"selfCareAccount" : "Y",
"contractDetails" : {
"startDate" : ISODate("2017-09-03T11:56:58.658+0000"),
"endDate" : ISODate("9999-12-31T00:00:00.000+0000")
},
"technology" : {
"masterCode" : "GSM"
},
"starterKitUpdated" : "Y",
"relatedProject" : "",
"businessType" : {
"masterCode" : "Prepaid"
},
"mobileMoneyAccount" : "Y",
"activatedVia" : {
"masterCode" : "SP"
},
"serviceType" : {
"masterCode" : "GSM"
},
"subServiceType" : {
"masterCode" : "Voice"
},
"serviceNumber" : "9339904299",
"simDetails" : {
我已经编写了下面的查询来获取documentVerifiedDate,其中documentPurpose是POID,serviceNumber是9339904299:
db.Service.find ({
"service.serviceDetails.serviceNumber": "9339902499",
"service.serviceUser.profileDetails.identificationDetails.identificationDetail.0.documentPurpose.masterCode" : "POID"
},
{
"service.serviceUsear.profileDetails.identificationDetails.identificationDetail.0.documentVerifiedDate" : 1,
_id: 0
})
我得到的结果如下:
{
"service" : {
}
}
如果您能帮助我理解为什么上述查询无法达到预期目的,即documentVerifiedDate未返回,我将不胜感激
我使用了下面的链接来编写查询。
从
$elemMatch、$slice和$s是实现特定项目的唯一方法
要包含在返回数组中的元素。例如,你不能
使用数组索引项目特定的数组元素;e、 g{
instock.0:1}投影将不会使用第一个
元素
使用$positional操作符
差不多
db.Service.find ({
"service.serviceDetails.serviceNumber": "9339904299",
"service.serviceUser.profileDetails.identificationDetails.identificationDetail.documentPurpose.masterCode": "POID"
},
{
"service.serviceUser.profileDetails.identificationDetails.identificationDetail.$": 1
})
这将为您提供匹配的identificationDetail对象,您可以使用文档中的documentVerifiedDate
注意:查询中的serviceNumber与提供的文档不匹配。我已将查询调整为使用文档中的serviceNumber。谢谢Veeram,因此将返回一个对象,其字段稍后可以访问。我问这个问题是因为我需要在Python中使用它,因为它返回了一个列表,我使用迭代器访问documentVerifiedDate,而如果只返回documentVerifiedDate,我就可以跳过那些迭代或dictionary access.Np。您可以使用findOne返回对象。其他不需要的选项是使用聚合将结果转换为返回documentVerifiedDate。