1

假设我有一个用户架构如下

var User = new db.Schema({
    username    : {type: String, unique: true}
    , password    : String
    , email: String
});

为了适应有朋友的用户,我正在考虑修改架构如下

var User = new db.Schema({
    username    : {type: String, unique: true}
    , password    : String
    , email: String
    , friends: [?]
});

我正在考虑对数据库进行非规范化以加快查询速度,而不仅仅是存储 ObjectId。假设现在我只想将 ObjectId 和 username 存储在 friends 数组中。是否可以做类似的事情

friends: [{String, String}]

这两个字符串代表 ObjectId 和用户名?我不想创建一个全新的架构,因为我不需要新的 ObjectId。

4

1 回答 1

3

当然你可以这样做,但我真的建议命名这些字段,比如(在 Mongo shell 语法中):

user = {
    '_id' : ObjectId(....),
    'username' : 'derick',
    'password' : 'notmypw',
    'email' : 'nospam@example.com',
    'friends' : [
        { 'id': ObjectId(....), 'username' : 'adam' },
        { 'id': ObjectId(....), 'username' : 'ross' },
    ]
};

但是,您(当然)根本不必存储 ObjectId,因为您username已经是唯一的。哎呀,您甚至可以将用户的用户名作为_id字段的 ID:

user = {
    '_id' : 'derick',
    'password' : 'notmypw',
    'email' : 'nospam@example.com',
    'friends' : [
        { 'username' : 'adam' },
        { 'username' : 'ross' },
    ]
};

我认为在 Mongoose 中,您必须这样做(通过阅读http://mongoosejs.com/docs/model-definition.html上的“在文档中定义文档” )

var Friend = new db.Schema({
    username  : String
});

var User = new db.Schema({
    username    : {type: String, unique: true}
    , password    : String
    , email: String
    , friends: [Friend]
});
于 2012-05-12T07:55:29.117 回答