2014-01-29 94 views
13

我是否理解正確,如果我想查詢的集合,我必須做到以下幾點:查詢的集合而不通過架構在貓鼬

var mongoose = require("mongoose"); 

mongoose.connect(); 

var db = mongoose.connection; 

db.on('open', function callback() { 

    var kittySchema = mongoose.Schema({ 
     name: String 
    }) 

    var Kitten = mongoose.model('Kitten', kittySchema) 


    Kitten.find(function (err, kittens) { 
     console.log(kittens); 
    }) 

}); 

我是不是要每一次都指定模式,即使已經有一羣小貓?

爲什麼我不能這樣做db.Kittens.find()

+0

db.Kittens.find()將是同步的 –

回答

24

從貓鼬主頁:

貓鼬提供了一個直接的,基於架構的解決方案, 建模應用程序數據和包括內置型鑄造, 驗證,查詢建設,業務邏輯掛鉤和更多,出 框。

Mongoose無法從可能唯一的文檔集合中推斷出模式。 MongoDB不會對存儲在集合中的文檔執行模式。

所以,貓鼬加於本地的NodeJS驅動程序(here),很多發現更高效的一層。使用Node.JS時,不要求使用MongoDB。

貓鼬從根本上需要兩個東西的工作:

  1. 模式==這定義了文檔結構(reference)。您可以添加validation,新方法,添加虛擬屬性,使用data types,建立references到其他集合(模型)。
  2. 型號==這是然後在運行時用來表達對集合(reference)查詢類。 Schema定義用於構建模型。

所以,你要粘貼的樣品中看到的,存在定義的小貓Schema,然後創建一個ModelKitten。使用模式和模型的好處在於,Mongoose會強制執行可用的屬性/字段。

你只定義了Schema S和Model一度在應用程序中。所以,通常在應用程序啓動時,您需要執行代碼來定義它們,然後在整個應用程序生命週期中根據需要使用Model實例。

有很多種,你會想可能使用貓鼬更多的理由。

儘管你是絕對正確的,但你可以直接使用更直接的東西,而無需使用NodeJS本地驅動程序的模式。語法是類似於你顯示什麼,但稍微複雜一些:

MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { 
    if(err) { return console.dir(err); } 

    var collection = db.collection('kittens'); 

    collection.find().toArray(function(err, kittens) { 
     // here ... 
    });  
}); 

,而不是簡單的:

Kitten.find(function(err, kittens) { 

}); 

另外,使用貓鼬的時候,你可能會發現,編寫更復雜的查詢是更容易編寫和閱讀:

Kitten.find().where('name', 'Harold').exec(/*callback*/); 

我建議通過更多的文檔閱讀,以獲得更好的手感的框架以及它是否滿足您的需求很好地匹配。不幸的是,這些文檔有點分散,但如果您仔細閱讀Guide標題的小標題,您將獲得大量可用信息。

11

如果沒有模式,則不能使用Mongoose。如果你想在沒有模式的情況下使用MongoDB,不要使用Mongoose,而應該使用類似mongodb的東西。

+0

到目前爲止謝謝。我想我的問題是我發現貓鼬的文檔非常混亂。您是否介意簡要解釋架構和模型的術語以及它們如何一起工作? – user2422960

+2

是的,他們的文檔可以真正使用一些幫助 – the0ther