简体   繁体   English

寻找猫鼬“你好世界”的例子

[英]Looking for Mongoose “hello world” example

Update : Been some time.更新:有一段时间了。 But back then decided not to use Mongoose.但当时决定不使用猫鼬。 Main reason being that we couldn't really come up with a great reason for using an ORM when using mongo and javascript.主要原因是我们在使用 mongo 和 javascript 时无法真正想出使用 ORM 的充分理由。


I've been trying to create a database/model with Mongoose which is basically just a user database where the username is unique.我一直在尝试使用 Mongoose 创建一个数据库/模型,它基本上只是一个用户名唯一的用户数据库。 Sounds simple enough, but for some reason I've been unable to do so.听起来很简单,但由于某种原因,我一直无法这样做。

What I've got so far is this:我到目前为止是这样的:

var mongoose = require('mongoose').Mongoose,
    db = mongoose.connect('mongodb://localhost/db');

mongoose.model('User', {
    properties: [
        'name',
        'age'
    ],

    cast: {
        name: String,
        age: Number
    },

    //indexes: [[{name:1}, {unique:true}]],
    indexes: [
        'name'
    ]
    /*,
    setters: {},
    getters: {},
    methods: {}
    */
});    

var User = db.model('User');

var u = new User();
u.name = 'Foo';

u.save(function() {
    User.find().all(function(arr) {
        console.log(arr);
        console.log('length='+arr.length);
    });
});
/*User.remove({}, function() {});*/

It just doesn't work.它只是不起作用。 The database is created alright, but the username is not unique.数据库创建好了,但用户名不是唯一的。 Any help or knowledge of what I'm doing wrong?对我做错了什么有任何帮助或知识吗?

You need to define the schema.您需要定义架构。 Try this: (试试这个:(

var mongoose = require('mongoose').Mongoose,
db = mongoose.connect('mongodb://localhost/db'),
Schema = mongoose.Schema;

mongoose.model('User', new Schema({
    properties: [
        'name',
        'age'
    ],

    [...]
}));    

For Mongoose 2.7 (tested in Node v. 0.8):对于猫鼬 2.7(在 Node v. 0.8 中测试):

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var db = mongoose.connect('mongodb://localhost/db');

var User = new Schema({
  first_name: String,
  last_name: String
});

var UserModel = mongoose.model('User', User);

var record = new UserModel();

record.first_name = 'hello';
record.last_name = 'world';

record.save(function (err) {

  UserModel.find({}, function(err, users) {

    for (var i=0, counter=users.length; i < counter; i++) {

      var user = users[i];

      console.log( "User => _id: " + user._id + ", first_name: " + user.first_name + ", last_name: " + user.last_name );

    }

  });

});

Try giving right path in var mongoose = require('mongoose').Mongoose,尝试在 var mongoose = require('mongoose').Mongoose 中给出正确的路径,

. . It worked for me..它对我有用..

# #

my code我的代码

require.paths.unshift("/home/LearnBoost-mongoose-45a591d/mongoose"); var mongoose = require('mongoose').Mongoose; var db = mongoose.connect('mongodb://localhost/db'); mongoose.model('User', { properties: ['first name', 'last name', 'age', 'marriage_status', 'details', 'remark'], }); var User = db.model('User'); var record = new User(); record.first name = 'xxx'; record.last name = 'xxx'; record.age = 'xxx'; record.marriage_status = 'xxx'; record.details = 'xxx'; record.remarks = 'xxx'; record.save(function() { User.find().all(function(arr) { console.log(arr); console.log('length='+arr.length); }); }); //User.remove({}, function() {});

Compile it with node filename.js good luck..用 node filename.js 编译它祝你好运..

Learnboost 最近上传了一组例子https://github.com/LearnBoost/mongoose/tree/master/examples

You should define your unique indexes before running your app for the first time.您应该在第一次运行您的应用程序之前定义您的唯一索引。 Otherwise, you need to drop your collection and start over.否则,您需要放弃收藏并重新开始。 Also, mongoose will not throw an error when you attempt to save { name: 'user1' } when 'user1' already exists.此外,当“user1”已经存在时,当您尝试保存 { name: 'user1' } 时,mongoose 不会抛出错误。

I am aware this question is 10 years old and the original poster abandoned Mongoose, but since it pops up near the top of Google searches I felt I would provide a fresh answer.我知道这个问题已经有 10 年的历史了,最初的海报放弃了 Mongoose,但由于它出现在 Google 搜索的顶部附近,我觉得我会提供一个新的答案。

Providing a complete basic example, using Typescript.提供一个完整的基本示例,使用 Typescript。 I have added comments in the code, where appropriate.我在代码中适当地添加了注释。

async function mongooseHelloWorld () {
    const url = 'mongodb://localhost/helloworld';

    // provide options to avoid a number of deprecation warnings
    // details at: https://mongoosejs.com/docs/connections.html
    const options = {
        'useNewUrlParser': true,
        'useCreateIndex': true,
        'useFindAndModify': false,
        'useUnifiedTopology': true
    };

    // connect to the database
    console.log(`Connecting to the database at ${url}`);
    await mongoose.connect(url, options);

    // create a schema, specifying the fields and also
    // indicating createdAt/updatedAt fields should be managed
    const userSchema = new mongoose.Schema({
        name:{
            type: String,
            required:true
        },
        email: {
            type: String,
            required: true
        }
    }, {
        timestamps: true
    });

    // this will use the main connection. If you need to use custom
    // connections see: https://mongoosejs.com/docs/models.html
    const User = mongoose.model('User', userSchema);

    // create two users (will not be unique on multiple runs)
    console.log('Creating some users');
    await User.create({ name: 'Jane Doe', email: 'jane.done@example.abcdef' });
    await User.create({ name: 'Joe Bloggs', email: 'jane.done@example.abcdef' });

    // Find all users in the database, without any query conditions
    const entries = await User.find();
    for (let i = 0; i < entries.length; i++) {
        const entry = entries[i] as any;
        console.log(`user: { name: ${entry.name}, email: ${entry.email} }`);
    }
}

// running the code, and making sure we output any fatal errors
mongooseHelloWorld()
    .then(() => process.exit(0))
    .catch(error => {
        console.log(error)
    });

Note, this was validated with Mongoose 5.9.26, running against Mongo 4.0.13.请注意,这已通过 Mongoose 5.9.26 进行了验证,针对 Mongo 4.0.13 运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM