2

我正在 Mongoose 中创建这样的结构:

var Access = new Schema({
  userId         : { type: ObjectId, unique: true },
  key            : { type: String, index: true },
  isOwner        : { type: Boolean, index: true },
});
mongoose.model('Access', Access);
var Workspace = new Schema({
  name           : { type: String, lowercase: true, unique: true},
  activeFlag     : Boolean,
  settings       : {
    welcomeMessage  : String,
    invoiceTemplate : String,
    longName        : String,
    defaultCountry  : String,
    countryId       : { type: ObjectId, index: true },
  },
  access          : [ Access ],

});
mongoose.model('Workspace', Workspace);

添加一些文档后,我看到了结果:

{ "activeFlag" : true, 
  "name" : "w7",
  "_id" : ObjectId("5036131f22aa014c32000006"),
  "access" : [  
   {  "user": "merc",
      "key" : "673642387462834", 
      "isOwner" : true,
      "_id" : ObjectId("5036131f22aa014c32000007") 
   }
   ],
   "__v" : 0
}

_id对子文档中的内容感到困惑,如果我将它添加为子结构而不是子模式,这似乎不会发生。所以问题:

1)那_id是从哪里来的?猫鼬的司机在做吗?如果是这样,我怎样才能使用直接的 Mongodb 达到相同的行为?只需添加一个 ObjectId 字段?

2) 什么时候使用子文档,什么时候只使用数据结构?

3) 我还没有开始使用我的 Web 应用程序的重要部分。但是,如果您允许 JsonRest 访问文档中的子记录,那么该 ID 不是真的存在吗?我的意思是真的很有用?

一如既往地感谢你!

默克。

4

1 回答 1

2

编辑:根据下面的评论删除了答案的重复数据。

要回答您的另一个问题,即如何在 MongoDB 本身中复制它,您可以按如下方式创建该文档:

db.foo.insert(
    { "activeFlag" : true, 
      "name" : "w7",
      "access" : [  
      {  "userId" : ObjectId(),
         "key" : "673642387462834", 
         "isOwner" : true,
         "_id" : ObjectId() 
      }
      ],
    "__v" : 0
})

解释一下,根文档中的 _id 是隐含的 - 如果未指定,它将由 MongoDB 添加。但是,要将 _id 放入子文档,您必须通过调用 ObjectId() 函数手动指定它。我的文档看起来像这样:

db.foo.find().pretty()
{
    "_id" : ObjectId("50375bd0cee59c8561829edb"),
    "activeFlag" : true,
    "name" : "w7",
    "access" : [
        {
            "userId" : ObjectId("50375bd0cee59c8561829ed9"),
            "key" : "673642387462834",
            "isOwner" : true,
            "_id" : ObjectId("50375bd0cee59c8561829eda")
        }
    ],
    "__v" : 0
}
于 2012-08-24T10:51:04.063 回答