2017-03-09 34 views
0

我想獲取貓鼬中模式的所有字段。現在,我使用下面的代碼:選擇貓鼬模式中的所有字段

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() 

但我希望所有的領域,無論他們是否是空的。與往常一樣,提前謝謝

回答

1

我不知道,如果你想在一個類似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,如果事實並非如此。

+0

非常感謝!你是高手,不僅回答了我的問題,你給了我一個額外的工具,謝謝。你是對的,我正在將我的知識從SQL遷移到noSQL。我的心理結構仍然是關係型 – maoooricio

+0

這就是我的想法。當我第一次切換時,我也有同樣的精神失常。很高興幫助=) – samanime

0

MongoDB是無模式,並且不具有表,每個集合可以具有不同類型的items.Usually的對象以某種方式相關的或具有一個共同的基類型。使用

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

所有鍵名稱,然後運行的結果集合不同,以便找到所有的按鍵

Retrive invidual記錄

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