在数组对象中查询自动生成Shortid字段在mongodb上不工作?

我已经写了一个查询来查找特定对象的数组,但是它返回所有文档,

我的对象是

{ "_id" : ObjectId("5a253ae1c14d9573f1f91088"), "accountId" : 1, "regionId" : "1", "problemId" : "399", "plannedDeliveryDate" : ISODate("2017-09-18T00:00:00.000Z"), "algorithm" : "GREEDYWITHREGRET", "numberOfTrips" : 0, "status" : "", "routes" : [ { "routeStartTime" : 36000, "routeEndTime" : 36450.1496791878, "totalRouteTravelTime" : 0.149679187838046, "totalRouteCost" : 16.1496791878312, "routeServiceTime" : 450, "totalRouteDistance" : 0.149679187831155, "originalLocationId" : "", "routeMethod" : "Manual", "routeBreakTime" : null, "routeSize1" : 338, "routeSize2" : 5719, "routeSize3" : 430, "_id" : ObjectId("5a253ae1c14d9573f1f91089"), "stops" : [ { "sequence" : 0, "locationId" : "100", "lat" : 28.5901139, "lng" : 77.3078057, "stopName" : "Masafi Park Al Quoz", "locationType" : "DEPOT", "serviceType" : "", "arrivalTime" : 36000, "departureTime" : 54000, "travelTime" : null, "isVisited" : false, "visitedTime" : null, "travelDistance" : null, "travelCost" : null, "serviceTime" : 0, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f910ab"), "orders" : [ { "_id" : ObjectId("5a253ae1c14d9573f1f910ac") } ], "stopId" : "H1lgqyshzZG" }, { "sequence" : 1, "locationId" : "11720", "lat" : 28.5950096, "lng" : 77.3141629, "stopName" : "Spinneys TCR", "locationType" : "service", "serviceType" : "Delivery", "arrivalTime" : 36289, "departureTime" : 36319, "travelTime" : 289, "isVisited" : false, "visitedTime" : null, "travelDistance" : 1295, "travelCost" : 0, "serviceTime" : 0.5, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f910a9"), "orders" : [ { "orderId" : "AQ137O1701233", "SIZE1" : 10, "SIZE2" : 190, "SIZE3" : 10, "_id" : ObjectId("5a253ae1c14d9573f1f910aa") } ], "stopId" : "Bkkg9yinfZG" }, { "sequence" : 16, "locationId" : "100", "lat" : 28.5901139, "lng" : 77.3078057, "stopName" : "DEPOT", "locationType" : "DEPOT", "serviceType" : null, "arrivalTime" : 40808, "departureTime" : null, "travelTime" : 232, "isVisited" : false, "visitedTime" : null, "travelDistance" : 1169, "travelCost" : 0, "serviceTime" : 0, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f9108b"), "orders" : [ { "_id" : ObjectId("5a253ae1c14d9573f1f9108c") } ], "stopId" : "S1ecJi2MZz" } ], "vehicle" : { "vehicleId" : 67054, "vehicleTypeId" : "", "vehicleFixedCost" : null, "vehicleVariableCost" : null }, "workers" : [ { "id" : "", "type" : "", "name" : "", "_id" : ObjectId("5a253ae1c14d9573f1f9108a") } ], "routeId" : "r1qJo2zWG" }, { "routeStartTime" : 36000, "routeEndTime" : 36450.1496791878, "totalRouteTravelTime" : 0.149679187838046, "totalRouteCost" : 16.1496791878312, "routeServiceTime" : 450, "totalRouteDistance" : 0.149679187831155, "originalLocationId" : "", "routeMethod" : "Manual", "routeBreakTime" : null, "routeSize1" : 338, "routeSize2" : 5719, "routeSize3" : 430, "_id" : ObjectId("5a253ae1c14d9573f1f91089"), "stops" : [ { "sequence" : 0, "locationId" : "100", "lat" : 28.5901139, "lng" : 77.3078057, "stopName" : "Masafi Park Al Quoz", "locationType" : "DEPOT", "serviceType" : "", "arrivalTime" : 36000, "departureTime" : 54000, "travelTime" : null, "isVisited" : false, "visitedTime" : null, "travelDistance" : null, "travelCost" : null, "serviceTime" : 0, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f910ab"), "orders" : [ { "_id" : ObjectId("5a253ae1c14d9573f1f910ac") } ], "stopId" : "H1lgqyshzZG" }, { "sequence" : 1, "locationId" : "11720", "lat" : 28.5950096, "lng" : 77.3141629, "stopName" : "Spinneys TCR", "locationType" : "service", "serviceType" : "Delivery", "arrivalTime" : 36289, "departureTime" : 36319, "travelTime" : 289, "isVisited" : false, "visitedTime" : null, "travelDistance" : 1295, "travelCost" : 0, "serviceTime" : 0.5, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f910a9"), "orders" : [ { "orderId" : "AQ137O1701233", "SIZE1" : 10, "SIZE2" : 190, "SIZE3" : 10, "_id" : ObjectId("5a253ae1c14d9573f1f910aa") } ], "stopId" : "Bkkg9yinfZG" }, { "sequence" : 16, "locationId" : "100", "lat" : 28.5901139, "lng" : 77.3078057, "stopName" : "DEPOT", "locationType" : "DEPOT", "serviceType" : null, "arrivalTime" : 40808, "departureTime" : null, "travelTime" : 232, "isVisited" : false, "visitedTime" : null, "travelDistance" : 1169, "travelCost" : 0, "serviceTime" : 0, "serviceTimeCost" : 0, "tripNumber" : 0, "_id" : ObjectId("5a253ae1c14d9573f1f9108b"), "orders" : [ { "_id" : ObjectId("5a253ae1c14d9573f1f9108c") } ], "stopId" : "S1ecJi2MZz" } ], "vehicle" : { "vehicleId" : 67054, "vehicleTypeId" : "", "vehicleFixedCost" : null, "vehicleVariableCost" : null }, "workers" : [ { "id" : "", "type" : "", "name" : "", "_id" : ObjectId("5a253ae1c14d9573f1f9108a") } ], "routeId" : "r1qJo2zWH" } ], "unassignedJobs" : [], "problemDate" : ISODate("2017-12-04T12:09:05.762Z"), "__v" : 0 } 

我的查询是

  db.getCollection('routes').find({"routes": {"$elemMatch": {"routeId": "r1qJo2zWG"}}}) 

我的预期结果是

 { "_id": ObjectId("5a253ae1c14d9573f1f91088"), "accountId": 1, "regionId": "1", "problemId": "399", "plannedDeliveryDate": ISODate("2017-09-18T00:00:00.000Z"), "algorithm": "GREEDYWITHREGRET", "numberOfTrips": 0, "status": "", "routes": [ { "routeStartTime": 36000, "routeEndTime": 36450.1496791878, "totalRouteTravelTime": 0.149679187838046, "totalRouteCost": 16.1496791878312, "routeServiceTime": 450, "totalRouteDistance": 0.149679187831155, "originalLocationId": "", "routeMethod": "Manual", "routeBreakTime": null, "routeSize1": 338, "routeSize2": 5719, "routeSize3": 430, "_id": ObjectId("5a253ae1c14d9573f1f91089"), "stops": [ { "sequence": 0, "locationId": "100", "lat": 28.5901139, "lng": 77.3078057, "stopName": "Masafi Park Al Quoz", "locationType": "DEPOT", "serviceType": "", "arrivalTime": 36000, "departureTime": 54000, "travelTime": null, "isVisited": false, "visitedTime": null, "travelDistance": null, "travelCost": null, "serviceTime": 0, "serviceTimeCost": 0, "tripNumber": 0, "_id": ObjectId("5a253ae1c14d9573f1f910ab"), "orders": [ { "_id": ObjectId("5a253ae1c14d9573f1f910ac") } ], "stopId": "H1lgqyshzZG" }, { "sequence": 1, "locationId": "11720", "lat": 28.5950096, "lng": 77.3141629, "stopName": "Spinneys TCR", "locationType": "service", "serviceType": "Delivery", "arrivalTime": 36289, "departureTime": 36319, "travelTime": 289, "isVisited": false, "visitedTime": null, "travelDistance": 1295, "travelCost": 0, "serviceTime": 0.5, "serviceTimeCost": 0, "tripNumber": 0, "_id": ObjectId("5a253ae1c14d9573f1f910a9"), "orders": [ { "orderId": "AQ137O1701233", "SIZE1": 10, "SIZE2": 190, "SIZE3": 10, "_id": ObjectId("5a253ae1c14d9573f1f910aa") } ], "stopId": "Bkkg9yinfZG" }, { "sequence": 16, "locationId": "100", "lat": 28.5901139, "lng": 77.3078057, "stopName": "DEPOT", "locationType": "DEPOT", "serviceType": null, "arrivalTime": 40808, "departureTime": null, "travelTime": 232, "isVisited": false, "visitedTime": null, "travelDistance": 1169, "travelCost": 0, "serviceTime": 0, "serviceTimeCost": 0, "tripNumber": 0, "_id": ObjectId("5a253ae1c14d9573f1f9108b"), "orders": [ { "_id": ObjectId("5a253ae1c14d9573f1f9108c") } ], "stopId": "S1ecJi2MZz" } ], "vehicle": { "vehicleId": 67054, "vehicleTypeId": "", "vehicleFixedCost": null, "vehicleVariableCost": null }, "workers": [ { "id": "", "type": "", "name": "", "_id": ObjectId("5a253ae1c14d9573f1f9108a") } ], "routeId": "r1qJo2zWH" } ], "unassignedJobs": [ ], "problemDate": ISODate("2017-12-04T12:09:05.762Z"), "__v": 0 } 

这可以使用MongoDB中的聚合pipe道完成。

在这种情况下,我们将routes作为一个数组首先$展开 ,然后使用$ match来实现结果。

Mongo Shell查询

 db.routes.aggregate([ {$unwind:"$routes"}, {$match: {"routes.routeId": "r1qJo2zWG"}} ]) 

您可以使用以下查询。 它将首先按照提供的查询过滤掉文档,然后在投影文档时检查每个文档的元素匹配。

 db.getCollection('routes').find({"routes.routeId": "r1qJo2zWG"}, {routes : {"$elemMatch": {"routeId": "r1qJo2zWG"}}})