How to get documents from a collection using the $nin operator in mongodb

Viewed 81

I have a user schema like this

const userSchema= new mongoose.Schema({

  Username:{
      type:String,
      trim:true,
      required:true
  },
  email:{
    type:String,
    trim:true,
    required:true
},
hashed_password:{
    type:String,
    trim:true,
    required:true
},
salt:String,
created:{
type:Date,
default:Date.now,
},
updated:Date,
photo:{
data:Buffer,
contentType:String
},

about:{
 type:String   
},

following:[{type:ObjectId,ref:"User",}],

followers:[{type:ObjectId,ref:"User"}]
})

when i run the query

User.find({$_id:{$nin:following}} , (err, users) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(users)
  //  let data=users

  //  console.log(following.length,"following")

  //  console.log(newuser)

  }).select("Username")


};
the following variable is an array of objects like this

[{"_id":"5e9c2c7aa9f4bc46e88c7635","Username":"Batman"},{"following":[],"followers":[],"_id":"5ead159d3b41d7061ce639fe","created":"2020-05-13T19:37:17.161Z"}]

after running the query i get an error:
 "errmsg": "unknown top level operator: $_id",
        "code": 2,
        "codeName": "BadValue",

how do i input the fields properly in my query

2 Answers

Remove $ from _id as with operator mongodb identify it as an operatorlike ($match etc) ,but there is no such operator so it throws error

User.find({_id:{$nin:following}} , (err, users) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(users)
  //  let data=users

  //  console.log(following.length,"following")

  //  console.log(newuser)

  }).select("Username")


};

You Can Follow This Code

db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
Related