skip to Main Content

Suppose I have these documents:

[
    {
        _id: 132143124,
        orders: [true, false, false],
    },
    {
        _id: 3123,
        orders: [true, true, true],
    },
];

How do I get only the documents that dont have ‘false’ in their orders array.
I need an aggregate stage solution. ( MongoDB aggregate solution )

2

Answers


  1. You can use $not or $ne ( as Mongo’s query language flattens arrays ) for this, like so:

    db.collection.find({
      orders: {$ne: false}
    })
    

    Mongo Playground

    same syntax will work in the aggregation pipeline:
    Mongo Playground Aggregation

    Login or Signup to reply.
  2. You could use filter function for arrays:

    const results = [
      {
        _id: 1,
        orders: [true, false, false],
      }, {
        _id: 2,
        orders: [true, true, true],
      }
    ]
        
    const filtered_results = results.map(({orders, ...data}) => {
      return {
        orders: orders.filter((order)=>order === true), 
        ...data
      }
    })
        
    console.log(filtered_results)
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search