【问题标题】:MongoDb aggregate error while getting dataMongoDb 获取数据时出现聚合错误
【发布时间】:2020-04-21 08:56:32
【问题描述】:

大家好,我正在尝试将我收集的所有数据从 mongodb 聚合到 node.js 代码。让我分享我的数据库截图和我的 node.js 代码。 我的数据库:

这是我的代码:

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");
});

我也使用了套接字,但套接字工作得很好。所以你可以检查 bidModel.aggregate 部分。有一个错误,但我找不到它是什么。我也不确定模式或模型。

【问题讨论】:

  • 不确定为什么需要使用套接字,请尝试我的回答。同样在这里let ObjectID = require("mongodb").ObjectID;,您可以将其更改为let ObjectId = require("mongodb").ObjectID; 以使const id = mongoose.Types.ObjectId("5e0e21c4daa2b01e34ef6dc1"); 工作

标签: node.js mongodb mongoose nosql mongoose-schema


【解决方案1】:

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);
        }
    })
})

请试试这个可能是这个解决方案解决你的问题

【讨论】:

  • 你能把bidModel改为拍卖吗,也许是你的进口问题
猜你喜欢
  • 2017-08-18
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多