簡體   English   中英

Db.Collection不是MongoDB函數

[英]Db.Collection Is Not a Function MongoDB

我見過一些人詢問此錯誤,但無法確定類似的問題,因此希望有人可以看到該問題。

我有一個名為“ coinstats”的數據庫,其中包含一個名為“ ticker_data”的文檔-位於MLAB中。

明確地說,我正在嘗試創建一條路線以測試將​​JSON數據渲染回頁面。

這是我的模型( Stats.js

const mongoose = require('mongoose');

const StatsSchema = new mongoose.Schema({
    id: String,
    name: String,
    symbol: String,
    rank: Number,
    price_usd: Number,
    price_btc: Number,
    "24h_volume_usd": Number,
    market_cap_usd: Number,
    available_supply: Number,
    total_supply: Number,
    max_supply: Number,
    percent_change_1h: Number,
    percent_change_24h: Number,
    percent_change_7d: Number,
    last_updated: Number,

})

const Stats = mongoose.model('Stats', StatsSchema);
module.exports = Stats;

和我的數據:

{
    "_id": {
        "$oid": "5a7b9124bc378ab20b321466"
    },
    "coins": [
        {
            "id": "bitcoin",
            "name": "Bitcoin",
            "symbol": "BTC",
            "rank": "1",
            "price_usd": "8192.48",
            "price_btc": "1.0",
            "24h_volume_usd": "10944200000.0",
            "market_cap_usd": "138055675030",
            "available_supply": "16851512.0",
            "total_supply": "16851512.0",
            "max_supply": "21000000.0",
            "percent_change_1h": "0.86",
            "percent_change_24h": "15.76",
            "percent_change_7d": "-19.22",
            "last_updated": "1518024265"
        },
        {
            "id": "ethereum",
            "name": "Ethereum",
            "symbol": "ETH",
            "rank": "2",
            "price_usd": "825.916",
            "price_btc": "0.100574",
            "24h_volume_usd": "4620530000.0",
            "market_cap_usd": "80502659260.0",
            "available_supply": "97470759.0",
            "total_supply": "97470759.0",
            "max_supply": null,
            "percent_change_1h": "1.44",
            "percent_change_24h": "15.36",
            "percent_change_7d": "-25.51",
            "last_updated": "1518024253"
        },
        {
            "id": "ripple",
            "name": "Ripple",
            "symbol": "XRP",
            "rank": "3",
            "price_usd": "0.776055",
            "price_btc": "0.00009450",
            "24h_volume_usd": "1423720000.0",
            "market_cap_usd": "30273296997.0",
            "available_supply": "39009215838.0",
            "total_supply": "99992725510.0",
            "max_supply": "100000000000",
            "percent_change_1h": "0.22",
            "percent_change_24h": "10.1",
            "percent_change_7d": "-31.37",
            "last_updated": "1518024241"
        },
        {
            "id": "bitcoin-cash",
            "name": "Bitcoin Cash",
            "symbol": "BCH",
            "rank": "4",
            "price_usd": "1014.04",
            "price_btc": "0.123481",
            "24h_volume_usd": "846536000.0",
            "market_cap_usd": "17192667935.0",
            "available_supply": "16954625.0",
            "total_supply": "16954625.0",
            "max_supply": "21000000.0",
            "percent_change_1h": "1.72",
            "percent_change_24h": "13.56",
            "percent_change_7d": "-31.79",
            "last_updated": "1518024258"
        },
        {
            "id": "cardano",
            "name": "Cardano",
            "symbol": "ADA",
            "rank": "5",
            "price_usd": "0.354359",
            "price_btc": "0.00004315",
            "24h_volume_usd": "820347000.0",
            "market_cap_usd": "9187490789.0",
            "available_supply": "25927070538.0",
            "total_supply": "31112483745.0",
            "max_supply": "45000000000.0",
            "percent_change_1h": "-0.2",
            "percent_change_24h": "8.88",
            "percent_change_7d": "-30.48",
            "last_updated": "1518024260"
        },
        {
            "id": "litecoin",
            "name": "Litecoin",
            "symbol": "LTC",
            "rank": "6",
            "price_usd": "150.66",
            "price_btc": "0.0183462",
            "24h_volume_usd": "967680000.0",
            "market_cap_usd": "8303348407.0",
            "available_supply": "55113158.0",
            "total_supply": "55113158.0",
            "max_supply": "84000000.0",
            "percent_change_1h": "1.55",
            "percent_change_24h": "17.03",
            "percent_change_7d": "-7.16",
            "last_updated": "1518024242"
        },
        {
            "id": "neo",
            "name": "NEO",
            "symbol": "NEO",
            "rank": "7",
            "price_usd": "111.903",
            "price_btc": "0.0136266",
            "24h_volume_usd": "694650000.0",
            "market_cap_usd": "7273695000.0",
            "available_supply": "65000000.0",
            "total_supply": "100000000.0",
            "max_supply": null,
            "percent_change_1h": "1.6",
            "percent_change_24h": "25.29",
            "percent_change_7d": "-22.08",
            "last_updated": "1518024251"
        },
        {
            "id": "stellar",
            "name": "Stellar",
            "symbol": "XLM",
            "rank": "8",
            "price_usd": "0.364085",
            "price_btc": "0.00004434",
            "24h_volume_usd": "237845000.0",
            "market_cap_usd": "6710864323.0",
            "available_supply": "18432136240.0",
            "total_supply": "103669352049",
            "max_supply": null,
            "percent_change_1h": "0.47",
            "percent_change_24h": "9.22",
            "percent_change_7d": "-31.29",
            "last_updated": "1518024244"
        },
        {
            "id": "eos",
            "name": "EOS",
            "symbol": "EOS",
            "rank": "9",
            "price_usd": "8.27388",
            "price_btc": "0.00100753",
            "24h_volume_usd": "890299000.0",
            "market_cap_usd": "5408422632.0",
            "available_supply": "653674290.0",
            "total_supply": "900000000.0",
            "max_supply": "1000000000.0",
            "percent_change_1h": "1.07",
            "percent_change_24h": "11.13",
            "percent_change_7d": "-29.0",
            "last_updated": "1518024256"
        }
]
}

這是我試圖在Express中創建路線的地方:

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const Stats = require("../models/stats.js");


/* GET coin stats. */
router.get('/', (req, res, next) => {
   Stats.collection("ticker_data").find({"coins": {symbol: "btc"}}, 'name' (err, stats) => {
      if(err){
        err.status = 400
        return next(err);
      }
      res.json(stats);
    });
})


module.exports = router;

我想我嘗試如何查找數據存在問題,但是不確定如何構造該路由。

這里有一些問題。 最值得注意的是,您的“ btc”查詢與全部大寫的“ BTC”值不一致。 此外,您的統計信息架構與帖子的“和我的數據:”部分不一致。 您的“和我的數據:”部分確實顯示了一個包含Stats對象數組的Schema。 我無法確定您的Stats對象是否是對另一個Stats模式的引用(例如,可以直接查詢它們),或者它們僅僅是一個硬編碼對象)。

您的實際架構應通過以下兩種方式之一定義(未經測試的代碼):

//Option 1.
//Define a TickerData schema in addition to your Stats schema. 
//Your Ticker schema will contain an array with references to your Stats objects.
//For most use-cases, I suspect this is the better option.
// TickerData.js
const mongoose = require('mongoose');
const Stats = require('Stats');

const TickerDataSchema = new mongoose.Schema({
        id: String,
        coins: [{ type: mongoose.Schema.ObjectId, ref: 'Stats' }] 
    })

    const TickerData = mongoose.model('TickerData', TickerDataSchema);
    module.exports = TickerData;

要么

//Option 2. Array of hardcoded coin objects
//Replace your Stats schema with this:

const mongoose = require('mongoose');

const StatsSchema = new mongoose.Schema({
      id: String,
      coins: [{
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },
      {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },
      {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },          {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },
      {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },
      {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      },
      {
        id: String,
        name: String,
        symbol: String,
        rank: Number,
        price_usd: Number,
        price_btc: Number,
        "24h_volume_usd": Number,
        market_cap_usd: Number,
        available_supply: Number,
        total_supply: Number,
        max_supply: Number,
        percent_change_1h: Number,
        percent_change_24h: Number,
        percent_change_7d: Number,
        last_updated: Number,
      }]
    });

    const Stats = mongoose.model('Stats', StatsSchema);
    module.exports = Stats;

如果它是選項1,並且有一個名為“ stats”的單獨集合,則您的查詢應為

Stats.find({symbol: "BTC"})

如果是選項2,則您將不得不檢索整個Stats對象,然后在本地提取btc對象:

Stats.find({_id: "5a7b9124bc378ab20b321466"},  (err, stat) => {
  if(err){
    err.status = 400
    return next(err);
  }
  res.json(stat.coins.filter(coin -> {return coin.id === 'BTC'}));
}); 

坦率地說,這個問題似乎在模型/方案/參考的工作方式中凸顯了一些誤解-因此,我建議您閱讀一些基礎知識,並且應該從哪里弄清楚了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM