簡體   English   中英

選擇貓鼬模式中的所有字段

[英]Select all the fields in a mongoose schema

我想獲得貓鼬模式的所有字段。 現在,我使用以下代碼:

let Client = LisaClient.model('Client', ClientSchema)
let query = Client.findOne({ 'userclient': userclient })
query.select('clientname clientdocument client_id password userclient')
let result = yield query.exec()

但是我希望所有字段都是空的。 一如既往,提前謝謝

我不確定您是否希望以類似SQL的方式使用所有字段,還是以適當的MongoDB方式使用所有字段。

如果希望以正確的MongoDB方式使用它們,則只需刪除query.select行。 該行說只返回其中列出的字段。

如果您以類似SQL的方式表示,則MongoDB不會那樣工作。 每個文檔只有在插入時輸入的字段。 如果在插入文檔時只給了它某些字段,那么即使其他集合中的其他文檔具有不同的字段,該文檔也只會具有那些字段。

要確定集合中所有可用的字段,您必須找到所有文檔,遍歷所有文檔,並使用找到的所有不同鍵構建對象。

如果您需要返回的每個文檔始終具有您在選擇中指定的字段,則只需在返回對象后對其進行轉換。

const fields = ['clientname', 'clientdocument', 'client_id', 'password', 'userclient'];
let Client = LisaClient.model('Client', ClientSchema)
let query = Client.findOne({ 'userclient': userclient })
query.select(fields.join(' '))
let result = yield query.exec()
fields.forEach(field => result[field] = result[field]);

forEach循環會將您想要的所有字段設置為結果中的值(如果存在),或者將其設置為undefined如果沒有)。

MongoDB是無模式的,沒有表,每個集合可以有不同類型的項目。通常,對象以某種方式相關或具有共同的基本類型。

使用以下方式檢索個人記錄

db.collectionName.findOne()db.collectionName.find().pretty()

要獲取所有鍵名,您需要MapReduce

mapReduceKeys = db.runCommand({
  "mapreduce": "collection_name",
  "map": function() {
      for (var key in this) {
          emit(key, null);
      }
  },
  "reduce": function(key, stuff) {
      return null;
  },
  "out": "collection_name" + "_keys"
})

然后對結果集合進行非重復操作,以便找到所有鍵

db[mapReduceKeys.result].distinct("_id") //["foo", "bar", "baz", "_id", ...]

暫無
暫無

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

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