Search code examples
node.jsmongodbmongoosenosqlmongoose-schema

MongoDb aggregate error while getting data


Hello everyone i'm trying to aggrate all data of my collection to node.js code from mongodb. Let me share my database screenshot and my node.js code. My database: MondoDB database

Here is my code:

let app = require("express")();
let http = require("http").Server(app);
let io = require("socket.io")(http);
let mongoose = require('mongoose');
let ObjectID = require("mongodb").ObjectID;

mongoose.connect('mongodb://localhost:27017/AuctionHouses', (err) => {
  if(err){
    console.log("error" + err);
  } else{
    console.log("mongodb connected");
  }
})

let schema = mongoose.Schema;


let Auction = new schema({
  auctions:{
    bids:{
      name:String,
      bid:Number,
      bidDate:Date
    },
    deadLine:Date
  }
})
const id = mongoose.Types.ObjectId("5e0e21c4daa2b01e34ef6dc1");

let clients = [];

let bidModel = mongoose.model('auction', Auction);
//let ObjectId = mongoose.Types.ObjectId;

io.on("connection", socket =>{
  console.log("User connected");
  clients.push(socket.id);

  if(clients != []){
    for(let i = 0; i< clients.length; i++){
      if(io.sockets.connected[clients[i]] != undefined){
        io.sockets.connected[clients[i]].emit("user", "User" + (i + 1));
      }
    }
  }


  socket.on("disconnect", function() {
    console.log("user disconnected");
    io.emit("user", "User" + Object.keys(io.sockets.connected).length);
  });

  socket.on("find", function(msg){
    bidModel.aggregate([
      { $unwind: '$bids'},
      { $sort: {
        "bids.bid" : -1
      }},
      { $limit : 2}
    ], function(err,msg){
      if(err){
        console.log(err);
      } else{
        io.emit("found", msg);
        console.log(msg);
      }
    })
  })

})

http.listen(5000, () => {
  console.log("started on port 5000");
});

I used socket too but socket is working well. So you can check bidModel.aggregate part. There is an error but i can not find what is it. I'm not sure about schemas or models too.


Solution

  • socket.on("find", function (msg) {
        bidModel.aggregate([
            { $unwind: '$bids' },
            {
                $sort: {
                    "bids.bid": -1
                }
            },
            { $limit: 2 }
        ]).exec((err, msg) => {
            if (err) {
                console.log(err);
            } else {
                io.emit("found", msg);
                console.log(msg);
            }
        })
    })

    Please try this one may be this solution solve your problem