1

I'm new to MongoDB. I've an object below

{
        "_id" : "ABCDEFGH1234",
        "level" : 0.6,
        "pumps" : [
                {
                        "pumpNo" : 1
                },
                {
                        "pumpNo" : 2
                }
        ]
}

And I just want to move level field to pumps array's objects like this

{
        "_id" : "ABCDEFGH1234",
        "pumps" : [
                {
                        "pumpNo" : 1,
                        "level" : 0.6
                },
                {
                        "pumpNo" : 2,
                        "level" : 0.6
                }
        ]
}

I've check on MongoDB doc in Aggregation section but didn't found anything. In SQL by JOIN or SUB Query I'm able to do but here it's No-SQL

Could you please help me with this? Thankyou

1 Answer 1

1

Try this on for size:

db.foo.aggregate([
    //  Run the existing pumps array through $map and for each                                      
    //  item (the "in" clause), create a doc with the existing                                      
    //  pumpNo and bring in the level field from doc.  All "peer"                                   
    //  fields to 'pumps' are addressable as $field.                                                
    //  By $projecting to a same-named field (pumps), we effectively                                
    //  overwrite the old pumps array with the new.                                                 
    {$project: {pumps: {$map: {
        input: "$pumps",
        as: "z",
        in: {pumpNo:"$$z.pumpNo", level:"$level"}
        }}  
    }}
]);

Strongly recommend you explore the power of $map, $reduce, $concatArrays, $slice, and other array functions that make MongoDB query language different from the more scalar-based approach in SQL.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.