запрос коллекции без прохождения схемы в мангусте

Правильно ли я понимаю, что если я хочу запросить коллекцию, я должен сделать следующее:

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

Ответ 1

На главной странице Mongoose:

Mongoose предоставляет прямолинейное, основанное на схеме решение для моделирования данных вашего приложения и включает встроенное литье типов, валидацию, построение запросов, крючки бизнес-логики и многое другое из коробки.

Mongoose не может вывести из коллекции потенциально уникальных документов схему. MongoDB не применяет схему к документам, хранящимся в коллекции.

Итак, Mongoose добавляет слой на собственный драйвер NodeJS (здесь), который многие находят более продуктивным. Это не требование использовать, хотя с MongoDB при использовании Node.JS.

Mongoose нуждается в двух вещах в основном для работы:

  1. Схема == это определяет структуру документа (ссылку). Вы можете добавить валидацию, новые методы, добавить виртуальные свойства, использовать типы данных, установить ссылки на другие коллекции (модели).
  2. Модель == это класс, который затем используется во время выполнения для выражения запросов к коллекциям (ссылка). Для построения модели используется определение схемы.

Итак, как вы видели в образце, который вы вставили, есть определенная Schema котенка, а затем создается Model Kitten. Что приятно с использованием схемы и модели, так это то, что Mongoose затем применяет доступные свойства/поля.

Вы только определяете Schema и Model один раз в приложении. Поэтому, как правило, по мере запуска приложения вам необходимо выполнить код для их определения, а затем использовать экземпляры Model мере необходимости на протяжении всего жизненного цикла приложения.

Есть еще много причин, по которым вы захотите использовать Mongoose потенциально.

Вы абсолютно правы, но вы можете просто использовать что-то более прямое, без схемы, используя собственный драйвер 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) {

});

Кроме того, при использовании Mongoose вы можете обнаружить, что писать более сложные запросы легче написать и прочитать:

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

Я бы предложил прочитать дополнительную документацию, чтобы лучше понять структуру и хорошо ли она соответствовала вашим потребностям. К сожалению, документация немного разбросана, но если вы перейдете к заголовкам заголовка Guide, у вас будет много хорошей информации.

Ответ 2

Вы не можете использовать Mongoose без схем. Если вы хотите использовать MongoDB без схем, не используйте Mongoose, вместо этого используйте что-то вроде mongodb.

Ответ 3

попробуй это..

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ProductSchema = new Schema({}, { strict: false });
const Product = mongoose.model('Product', ProductSchema, 'products');

module.exports = { Product };

Ответ 4

Ну, я не думаю, что Mongoose работает без использования схем, он основан на схемах.