如何用猫鼬做内在参考?

时间:2013-08-11 06:11:05

标签: mongodb mongoose

我想做以下代码之类的事情,但失败了。

var User = new Schema({
    name: { type: String, required: true },
    phone_number: { type: String, required: true },
    modified: { type: Date, default: Date.now },
    contacts: [{
        user: { type : Schema.ObjectId, ref : 'User' }
    }]
});

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

能够实现这个目的吗?

1 个答案:

答案 0 :(得分:0)

我认为我用错误的方式检查它,实际上它有效。

以下是我的测试:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('localhost', 'contacts_test');

var User = new Schema({
    name: { type: String, required: true },
    phone_number: { type: String, required: true },
    modified: { type: Date, default: Date.now },
    contacts: [
        {
            user: { type: Schema.ObjectId, ref: 'User' }
        }
    ]
});

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

mongoose.connection.on('open', function () {
    var user1 = new UserModel({name: 'kos', phone_number: "003"});

    user1.save(function (err) {
        if (err) throw err;

        var user2 = new UserModel({name: 'java', phone_number: "008"});
        user2.contacts = [{user: user1._id}];

        user2.save(function (err) {
            UserModel.findById(user2._id)
                .populate('contacts.user')
                .exec(function (err, user) {
                    if (err) console.error(err.stack || err);
                    console.log('user name: ' + user.name);
                    console.error('contact of first result : ', user.contacts[0].user.name);

                    mongoose.connection.db.dropDatabase(function () {
                        mongoose.connection.close();
                    });
                });
        });
    });
});