12

更新:しばらく経ちました。しかし、当時はマングースを使わないことに決めました。主な理由は、mongoとjavascriptを使用するときにORMを使用する大きな理由を思い付くことができなかったためです。


私はMongooseを使用してデータベース/モデルを作成しようとしています。これは基本的に、ユーザー名が一意である単なるユーザーデータベースです。簡単そうに聞こえますが、どういうわけか私はそうすることができませんでした。

私がこれまでに持っているのはこれです:

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() {});*/

それはうまくいきません。データベースは正常に作成されていますが、ユーザー名は一意ではありません。私が間違っていることについての助けや知識はありますか?

4

6 に答える 6

16

スキーマを定義する必要があります。これを試して: (

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

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

    [...]
}));    
于 2011-03-25T15:18:01.173 に答える
8

Mongoose 2.7の場合(ノード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 );

    }

  });

});
于 2012-07-16T13:18:56.043 に答える
3

var mongoose = require('mongoose')。Mongooseで正しいパスを指定してみてください。

。それは私のために働いた..

私のコード

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() {});

ノードfilename.jsでコンパイルしてください。

于 2010-11-21T06:34:17.820 に答える
1

アプリを初めて実行する前に、一意のインデックスを定義する必要があります。それ以外の場合は、コレクションを削除して最初からやり直す必要があります。また、'user1'がすでに存在する場合に{name:'user1'}を保存しようとしても、mongooseはエラーをスローしません。

于 2011-01-25T01:57:59.887 に答える
1

Learnboostは最近、一連の例をアップロードしましたhttps://github.com/LearnBoost/mongoose/tree/master/examples

于 2013-04-23T11:00:27.583 に答える
1

この質問は10年前のもので、元のポスターはマングースを放棄したことを知っていますが、Google検索の上部近くに表示されるので、新鮮な答えを提供したいと思いました。

Typescriptを使用して、完全な基本的な例を提供します。必要に応じて、コードにコメントを追加しました。

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

これは、Mongo4.0.13に対して実行されているMongoose5.9.26で検証されていることに注意してください。

于 2020-10-02T19:38:03.333 に答える