Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose.js:是否可以更改ObjectId的名称?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose.js:是否可以更改ObjectId的名称?

Node.js Mongoose.js:是否可以更改ObjectId的名称?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,关于mongoose中MongoObjectId的几个问题 1) 是否可以将ObjectId字段命名为非_id?如何做到这一点?当我在代码中执行以下操作时: MySchema = new mongoose.Schema({ id : mongoose.Schema.ObjectId }); 它改变不了什么 2) 如果我有名为_id的objectId字段,是否可以从请求返回该字段的另一个名称(例如,仅“id”-在web响应中发送它) 3) 还有一个仅供理解的问题:为什么ObjectId

关于mongoose中MongoObjectId的几个问题

1) 是否可以将ObjectId字段命名为非_id?如何做到这一点?当我在代码中执行以下操作时:

MySchema = new mongoose.Schema({
    id  : mongoose.Schema.ObjectId
});
它改变不了什么

2) 如果我有名为_id的objectId字段,是否可以从请求返回该字段的另一个名称(例如,仅“id”-在web响应中发送它)

3) 还有一个仅供理解的问题:为什么ObjectId\u id字段可以通过“id”属性而不是“id”属性访问

谢谢,Alex,“_id”元素是mongodb体系结构的一部分,它保证集合中的每个文档都可以唯一标识。如果您使用分片来允许跨不同机器的唯一标识符,这一点尤其重要。因此,这是一种设计选择,因此无法驾驭:)

_id的默认值生成如下:

  • 时间戳
  • 计算机主机名的哈希
  • 发电过程的pid控制
  • 增量
但是你可以使用任何你想要的价值,只要是独一无二的

如果你更容易想到必须存在的东西的id,但你真的不在乎:)只需让系统自动生成它并使用你自己的标识符

因此,如果您仍然想创建自己的“id”,请执行类似的操作:

db.mySchema.ensureIndex({"id": 1}, {"unique" : true})
但要确保它确实是唯一的,并且不会与您使用的API冲突

2) 在将其作为web响应发送之前,在应用程序端重命名它


3) 我认为这是因为你使用的API。也许作者发现返回id而不是_id更符合逻辑?老实说,我从未尝试过mongoose:)

请看这个问题,了解您所问问题的一个方面:谢谢,但当我使用时,虚拟属性似乎无法解决问题。find方法id不会返回vitruals,是吗?我相信“owner:mongoose.Schema.ObjectId”代表关系。和_id无法更改。我感兴趣的是,是否可以用mongoose在查询结果中用id替换_id。是的,虚拟属性确实出现在从
返回的模型实例上。find
;这就是他们背后的全部想法。每个MongoDB文档都必须有一个
\u id
属性,但是ObjectId属性也可以用于其他事情——通常作为对另一个集合中文档的引用;在“查找结果”中没有ID属性。有什么问题吗?非常感谢您的回复。