MongoDb 获取数据时出现聚合错误

Posted

技术标签:

【中文标题】MongoDb 获取数据时出现聚合错误【英文标题】:MongoDb aggregate error while getting data 【发布时间】: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"); 工作 【参考方案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改为拍卖吗,也许是你的进口问题

以上是关于MongoDb 获取数据时出现聚合错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我使用 axios 获取数据时出现错误 500

从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误

使用 Firestore 获取数据时出现颤振错误

获取数据数组时出现 Codeigniter 错误

从大查询中获取数据时出现凭据错误

获取用户数据时出现未经身份验证的错误