0

I am having trouble writing query to extract object from an array using SerialNumber

db.query.findOne({orderId:'13052017002593'});

{ 
    "_id" : "36ndPwFKGdcTDRERx", 
    "orderId" : "13052017002593", 
    "items" : [
        {
            "serialNumber" : "XXX", 
            "status" : "COMPLETED", 
            "shippingType" : "MESSENGER", 
            "shippingDate" : ISODate("2017-05-16T10:16:16.941+0000"), 
            "returnDeposit" : true
        },
        {
            "serialNumber" : "YYY", 
            "status" : "COMPLETED", 
            "shippingType" : "MESSENGER", 
            "shippingDate" : ISODate("2017-05-16T10:16:16.941+0000"), 
            "returnDeposit" : true
        }

    ], 

    "createdAt" : ISODate("2017-05-13T10:15:09.904+0000")
}

Suppose if i want to extract object

{
        "serialNumber" : "XXX", 
        "status" : "COMPLETED", 
        "shippingType" : "MESSENGER", 
        "shippingDate" : ISODate("2017-05-16T10:16:16.941+0000"), 
        "returnDeposit" : true
    },

How Can i extract only this object?

I have database 3.2;

I tried running these queries:

let params = {
    $and: [{ orderId }, {'items.serialNumber':serialNumber}]
  };

let ctx = {
    fields:{items:{$elemMatch:serialNumber}}
}
let order = Orders.find(params,ctx).fetch()

Which is giving error;

Also i tried: let order = Orders.find({orderId:orderId},{_id:0,items:{$elemMatch: {serialNumber:serialNumber}}}); returning me all the values in the order object

Any one can help me please. Any suggestion is much appreciated ! Thanks!

I have also posted in meteor forum https://forums.meteor.com/t/how-to-get-only-one-object-from-array-of-objects/43613

Sijan Shrestha
  • 2,136
  • 7
  • 26
  • 52
  • The [positional `$` operator](https://docs.mongodb.com/manual/reference/operator/projection/positional/) for "single" matches – Neil Lunn May 10 '18 at 12:56
  • Also `.find({ orderId, 'items.serialNumber':serialNumber })` is the same an much shorter than using `$and`. – Neil Lunn May 10 '18 at 12:57

0 Answers0