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:
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.
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