MongoDB ve Mongoose arasındaki fark


164

Mongodb veritabanını kullanmak istedim, ancak kendi web sitesi ve kurulum yöntemlerine sahip iki farklı veritabanı olduğunu fark ettim: mongodb ve mongoose. Bu yüzden kendime şu soruyu sordum: "Hangisini kullanıyorum?".

Bu soruyu cevaplamak için topluma soruyorum, bu ikisi arasındaki farkları açıklayabilir misiniz? Ve mümkünse artıları ve eksileri? Çünkü bana gerçekten çok benziyorlar.


Yanıtlar:


248

MongoDB'nin verileri BSON belgeleri biçiminde depolayan bir NoSQL veritabanı sistemi olduğunu bildiğinizi varsayıyorum. Ancak sorunuz Node.js paketleriyle ilgili.

Node.js açısından, mongodb , bir mongodb örneğiyle etkileşim için yerel sürücü ve mongoose , MongoDB için bir Nesne modelleme aracıdır .

Mongoose, programcılara verilerini modellemenin bir yolunu sağlamak için MongoDB sürücüsünün üzerine inşa edilmiştir.

DÜZENLEME: Hangisinin daha iyi olduğu konusunda yorum yapmak istemiyorum, çünkü bu, bu cevabı düşündürür. Bununla birlikte, her iki yaklaşımı da kullanmanın bazı avantaj ve dezavantajlarını listeleyeceğim.

Mongoose'u kullanarak, bir kullanıcı belirli bir koleksiyondaki belgeler için şemayı tanımlayabilir. MongoDB'de verilerin oluşturulması ve yönetilmesinde büyük kolaylık sağlar. Olumsuz tarafı, firavun faresini öğrenmek biraz zaman alabilir ve oldukça karmaşık olan şemaları işlemede bazı sınırlamalara sahiptir.

Bununla birlikte, koleksiyon şemanız tahmin edilemezse veya Node.js içinde Mongo-shell benzeri bir deneyim istiyorsanız, devam edin ve MongoDB sürücüsünü kullanın. Alması en basit olanıdır. Buradaki dezavantaj, verileri doğrulamak için daha büyük miktarlarda kod yazmanız gerekecek ve hata riskinin daha yüksek olmasıdır.


10
Bu oldukça fikir temelli bir soru. Bazıları daha düşük seviyeli bir API tercih edebilir. Neden Mongoose'u ve yerli sürücüyü kontrol edip hangisinin sizin için daha iyi olduğuna karar vermiyorsunuz?
juunas

1
@ Michael9 Node.js için yerel MongoDB sürücüsü aynı ada sahip. Lütfen 'Node.js açısından ...' kelimelerine dikkat edin. Düzenlemeniz yanlıştı.
ZeMoon

@ZeMoon bu durumda olması gerektiği mongodbdeğil MongoDB: P
styvane

Firavun faresinin çoğul koleksiyon adlarına bağlandığı pratik bir fark olabilir mi?
Antony Gibbs

2
Bir de performans faktörünü göz önünde bulundurmalı, lütfen bu url'ye bakın, bu adam harika kriterler paylaştı. medium.com/@bugwheels94/…
DHIRAJ KATEKAR

47

Mongo, NoSQL Veritabanıdır.

Veri modelleriniz için herhangi bir ORM kullanmak istemiyorsanız, yerel sürücü mongo.js'yi de kullanabilirsiniz: https://github.com/mongodb/node-mongodb-native .

Mongoose, mongo verilerine kolayca anlaşılabilir sorgularla erişmemiz için bize işlevsellik sağlayan ormlardan biridir.

Mongoose, veritabanı modeliniz üzerinde bir soyutlama rolü oynar.


1
@ArslanRamay: medium.com/@bugwheels94/… , çok yardımcı
DHIRAJ KATEKAR

15

Her ikisi açısından bulundu Bir daha fark oldukça kolay olmasıdır connect to multiple databasesile mongodb native driversize kullanım iş ya varken mongoosehala bazı dezavantajlara sahiptir ki.

Bu nedenle, çok kiracılı bir uygulama için gitmek istiyorsanız, mongodb yerel sürücüsüne gidin.


6

Bu bileşenleri mülkiyet kodunuzla birlikte kullanmayı planlıyorsanız, lütfen aşağıdaki bilgilere bakın.

Mongodb:

  1. Bu bir veritabanı.
  2. Bu bileşen, Affero Genel Kamu Lisansı (AGPL) lisansına tabidir.
  3. Bu bileşeni özel kodunuzla bağlarsanız, kaynak kodunuzun tamamını (GPL, LGPL vb.) Viral etkisi nedeniyle kamuya açık alanda yayınlamanız gerekir.
  4. Uygulamanızı bulut üzerinde barındırıyorsanız, (2) geçerli olacaktır ve ayrıca kurulum bilgilerinizi son kullanıcılara vermeniz gerekecektir.

Firavun faresi:

  1. Bir nesne modelleme aracıdır.
  2. Bu bileşen, MIT lisansına tabidir.
  3. Bu bileşeni tescilli kodla birlikte herhangi bir kısıtlama olmaksızın kullanma iznine sahiptir.
  4. Uygulamanızın herhangi bir ortam veya ana bilgisayar kullanılarak gönderilmesine izin verilir.

1
Bahsetmeyi düşündüm. 16 Ekim 2018'den önceki Sunucu bileşenleri AGPL idi, ancak artık bazı özel lisanslardır. sürücü (mongodb) her zaman Apaçi olmasına ve özel mülk kod için hiçbir zaman önemi olmamasına rağmen. Referans: mongodb.com/community/licensing
DrHouse

2
MongoDB 4. bölümün cevabı yanlış. Genel olarak istemci uygulamaları, Apache v2 altında lisanslanan MongoDB sürücülerini (yani MongoDB Node.JS sürücüsü) kullanır. MongoDB sunucu kodunun kendisini (veritabanı) değiştiriyor ve yeniden dağıtıyorsanız, ya ticari bir anlaşmaya ya da açık kaynak koduna ihtiyacınız vardır. SSPL lisans değişikliği, veritabanı hizmet olarak bulut satıcıları maddesine yapılan bir
eklemedir

6

mongo-dbyeni geliştiriciler için harika bir seçim olmayabilir.
Öte yandan mongooseORM (Nesne İlişkisel Haritalama) olarak yeni başlayanlar için daha iyi bir seçim olabilir.


3
Stack Overflow'a hoş geldiniz! Cevabınız değerli olabilir, ancak bazı açıklamaları eksik. Belki cevabınıza hala bazı kelimeler ekleyebilirsiniz. İşte iyi cevaplar vermek için bir rehber .
David

5

Mongodb ve Mongoose, MongoDB veritabanı ile etkileşim için iki farklı sürücüdür.

Mongoose : Verileriniz için titiz bir modelleme ortamı sağlayan nesne veri modelleme (ODM) kitaplığı. MongoDB ile etkileşime girmek için kullanılır, veri yönetiminde kolaylık sağlayarak hayatı kolaylaştırır.

Mongodb : MongoDB ile etkileşim için Node.js'deki yerel sürücü.


2

Mongodb ve Mongoose tamamen farklı iki şey!

Mongodb veritabanının kendisidir , Mongoose ise Mongodb için bir nesne modelleme aracıdır .

DÜZENLEME: Belirtildiği gibi MongoDB npm paketidir, teşekkürler!


40
mongodb bir veritabanı değil, yerel mongo sürücüsü olan bir düğüm paketidir. Bir mongo sunucusuna js düğümünden erişmek için en düşük seviye API'dir.
mariocatch

3
Soru, db işlemleri için Mongodb yerel sürücüsü ile firavun faresi ile ilgiliydi . Cevap yerinde değil.
sarora

@mariocatch MongoDB, ihtiyacınız olan sorgulama ve indeksleme ile istediğiniz ölçeklenebilirlik ve esnekliğe sahip bir belge veritabanıdır. Dokümantasyonunun ana sayfasında yazılmıştır.
Deep Kakkar

0

İlk cevaptan itibaren

"Bir kullanıcı, Mongoose'u kullanarak belirli bir koleksiyondaki belgeler için şema tanımlayabilir. MongoDB'deki verilerin oluşturulması ve yönetilmesinde büyük kolaylık sağlar."

Artık mongoDB yerel sürücüsüyle şema tanımlayabilirsiniz.

## Yeni koleksiyon için

`db.createCollection("recipes",
    validator: { $jsonSchema: {
         <<Validation Rules>>
        }
    }
)`

## Mevcut koleksiyon için

`db.runCommand( {
        collMod: "recipes",
        validator: { $jsonSchema: {
             <<Validation Rules>>
            }
        }
    } )`
    

## tam örnek

`db.createCollection("recipes", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "servings", "ingredients"],
      additionalProperties: false,
      properties: {
        _id: {},
        name: {
          bsonType: "string",
          description: "'name' is required and is a string"
        },
        servings: {
          bsonType: ["int", "double"],
          minimum: 0,
          description:
            "'servings' is required and must be an integer with a minimum of zero."
        },
        cooking_method: {
          enum: [
            "broil",
            "grill",
            "roast",
            "bake",
            "saute",
            "pan-fry",
            "deep-fry",
            "poach",
            "simmer",
            "boil",
            "steam",
            "braise",
            "stew"
          ],
          description:
            "'cooking_method' is optional but, if used, must be one of the listed options."
        },
        ingredients: {
          bsonType: ["array"],
          minItems: 1,
          maxItems: 50,
          items: {
            bsonType: ["object"],
            required: ["quantity", "measure", "ingredient"],
            additionalProperties: false,
            description: "'ingredients' must contain the stated fields.",
            properties: {
              quantity: {
                bsonType: ["int", "double", "decimal"],
                description:
                  "'quantity' is required and is of double or decimal type"
              },
              measure: {
                enum: ["tsp", "Tbsp", "cup", "ounce", "pound", "each"],
                description:
                  "'measure' is required and can only be one of the given enum values"
              },
              ingredient: {
                bsonType: "string",
                description: "'ingredient' is required and is a string"
              },
              format: {
                bsonType: "string",
                description:
                  "'format' is an optional field of type string, e.g. chopped or diced"
              }
            }
          }
        }
      }
    }
  }
});`

Koleksiyon örneği ekle

`db.recipes.insertOne({
  name: "Chocolate Sponge Cake Filling",
  servings: 4,
  ingredients: [
    {
      quantity: 7,
      measure: "ounce",
      ingredient: "bittersweet chocolate",
      format: "chopped"
    },
    { quantity: 2, measure: "cup", ingredient: "heavy cream" }
  ]
});`

-1

Mongoose, mongodb sürücüsünün üstüne inşa edilmiştir, mongodb sürücüsü daha düşük seviyededir. Mongoose, bir şema ve sorguyu kolayca tanımlamak için bu kolay soyutlamayı sağlar. Ancak performans açısından Mongdb Driver en iyisidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.