簡體   English   中英

貓鼬find和findOne返回整個集合

[英]Mongoose find and findOne return entire collection

我在javascript中有以下代碼,並且該數據庫已經填充。 現在,當我使用find()findOne() ,Mongoose返回了超過6000個條目的整個集合。 為什么過濾器沒有發生?

var tickerIDSchema = new mongoose.Schema({
  ticker: String,
  name: String,
  exchange: String,
  "_id": false
});

var tickerListSchema = new mongoose.Schema({
  complete: [tickerIDSchema]
});

tickerListSchema.index(
  { "complete.ticker": 1, "complete.exhcange": 1 },
  { unique: true }
);

var tickerList = mongoose.model("tickerList", tickerListSchema);


tickerList.findOne({"complete.ticker": "BMO"}, function(err, data){

  console.log(data)
})

結果:

{ _id: 5a44452bb1dac235f039c66c,
  __v: 0,
  complete:
   [ { ticker: 'AAPL', name: 'Apple Inc.', exchange: 'Nasdaq' },
     { exchange: 'Amex',
       name: 'Altisource Asset Management Corp',
       ticker: 'AAMC' },
     { exchange: 'Amex',
       name: 'Almaden Minerals, Ltd.',
       ticker: 'AAU' },
     { exchange: 'Amex',
       name: 'Aberdeen Emerging Markets Smaller Company Opportunities Fund I',
       ticker: 'ABE' },
     { exchange: 'Amex',
       name: 'Acme United Corporation.',
       ticker: 'ACU' },
     { exchange: 'Amex', name: 'AeroCentury Corp.', ticker: 'ACY' },
     { exchange: 'Amex',
       name: 'Adams Resources & Energy, Inc.',
       ticker: 'AE' },
     { exchange: 'Amex', name: 'Ashford Inc.', ticker: 'AINC' },
     { exchange: 'Amex',
       name: 'Air Industries Group',
       ticker: 'AIRI' },
     ... 6675 more items ] }

您似乎有多余的抽象層,這是不必要的。

此代碼有效地創建具有單個屬性的文檔。

var tickerListSchema = new mongoose.Schema({
  complete: [tickerIDSchema]
});

結果是,您的mongodb集合tickerList中只有一個文檔,其中包含該單個屬性complete中的所有數據。 每MongoDB的文檔( https://docs.mongodb.com/manual/reference/method/db.collection.findOne/ ), findOne應返回匹配的文件。 因為您正在查詢子文檔,所以返回的結果是父文檔,其中包含您的tickerIDSchema中的所有數據

為了獲得所需的結果,您的貓鼬代碼應該看起來像這樣。

var tickerIDSchema = new mongoose.Schema({
  ticker: String,
  name: String,
  exchange: String,
  "_id": false
});

tickerIDSchema.index(
  { "ticker": 1, "exchange": 1 },
  { unique: true }
);

var tickerList = mongoose.model("tickerList", tickerIDSchema);

tickerList.findOne({"ticker": "BMO"}, function(err, data){
  console.log(data)
})

刪除tickerListSchema將使您可以直接查詢tickerIDSchema findOne()查詢將如下所示,並且find()應該如下操作:

tickerList.find({}, function(err, data){
    console.log(data)
})

暫無
暫無

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

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