MongoDB支持复合键的概念吗?

MongoDB支持复合键的概念吗?,mongodb,mongoose,Mongodb,Mongoose,假设我有一个如下所示的用户模式 var User = new db.Schema({ username : {type: String, unique: true} , password : String , email: String }); 为了适应有朋友的用户,我考虑如下修改模式 var User = new db.Schema({ username : {type: String, unique: true} , passwor

假设我有一个如下所示的用户模式

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,而是考虑对数据库进行非规范化,以实现更快的查询。假设现在我只想在friends数组中存储ObjectId和username。有可能做像这样的事情吗

friends: [{String, String}]

其中两个字符串表示ObjectId和username?我不想创建一个全新的模式,因为我不需要新的ObjectId。

当然可以,但我建议您命名字段,如(在Mongo shell语法中):

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

user = {
    '_id' : 'derick',
    'password' : 'notmypw',
    'email' : 'nospam@example.com',
    'friends' : [
        { 'username' : 'adam' },
        { 'username' : 'ross' },
    ]
};
我认为在Mongoose中,您必须这样做(从阅读“在文档中定义文档”开始)


谢谢你知道这个语法是如何翻译成Mongoose.js的吗?我试过几次组合,但都没用。文档似乎无法处理此情况
user = {
    '_id' : 'derick',
    'password' : 'notmypw',
    'email' : 'nospam@example.com',
    'friends' : [
        { 'username' : 'adam' },
        { 'username' : 'ross' },
    ]
};
var Friend = new db.Schema({
    username  : String
});

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