我collection
在 mongo 中有这个,但我的问题是有没有什么方法可以在collection
没有的情况下insert
获得_id
默认值,因为这次我使用 myid
作为第二行。
{
"_id" : ObjectId("5ca1abb6ce037511f000628e"),
"id" : "sjohnson",
"name" : "Steve Johnson"
}
我需要它是这样的:
{
"id" : "sjohnson",
"name" : "Steve Johnson"
}
根据官方文档,如果您的收藏没有
_id
明确的列;然后 MongoDB 将创建一个列_id
并写入type的十六进制ObjectId
值。如果您要使用自己的值处理列,
_id
那么您只需确保该列接收您自己提供的唯一值。例 1
让我们像这样创建一个示例数据库
稍后,我们执行以下命令将值插入到用户集合中
如果我们执行一个
find()
到所说的集合,它将返回这个结果
有了上面你已经能够验证如果你显式声明一个列
_id
,它将被尊重并且mongoDB默认不会添加一个例 2
现在我们要插入一条新记录,但是这次我们将省略该列
_id
,这将让 mongoDB 管理器自行添加该列并分配一个默认值如果我现在运行以下命令
结果我会得到以下结果
_id
MongoDB 字段必须存在于存储在数据库中的每个文档中。如果在执行 a 时文档没有这样的字段insert
,MongoDB 将为我们创建该字段。因此,我们无法摆脱上述领域。也就是说,您不能将其从文档中删除。
在您的问题中,您声明要使用自己的 field
id
。您有 2 个选项:_id
您可以通过在文档中发送该字段的值来覆盖该字段。但是,您必须能够保证这样的字段是唯一的。也许sjohnson
这不是最合适的。如果调用了用户Steve Johnson
并且您生成了_id
姓名和姓氏的首字母,那么Sam Johnson
例如,它已经是您无法使用此过程存储的名称。在许多地方,身份证号码被用作一个字段_id
,因为假定了唯一的关系。在其他情况下,使用电子邮件。还使用了自动integer
增量类型值。你已经有一些东西可以从那里拉出来了。请记住,当您插入文档时,它必须有一个_id
具有该文档唯一值的字段。您可以忽略存在这样一个字段的事实,并在进行查询时跳过它。您也可以像现在一样创建自己的 field
id
,并为两者使用相同的值id
,_id
始终牢记我在前一点中提到的内容。一个例子可能如下:
在进行查询时,我可以告诉 Mongo 跳过给我带来该字段,
_id
例如使用以下查询find
:如您所见,在查询中,我将一个名为parameter
projection
的文档作为第二个参数传递,它指定了我希望查询返回的字段。0
( )值false
表示不返回该字段,1
(true
) 值表示将返回。省略该参数时
projection
,MongoDB 返回文档中的所有字段。另一方面,如果传递的参数projection
指示 中的一个(或某些)值false
,则假定其余部分true
,除了_id
始终假定的字段true
。这就是我们刚刚进行的查询中发生的情况。另一方面,如果我们传递一个参数
projection
,表示 中的一个(或一些)值true
,其余的都被假定为false
(字段除外_id
)并且不会被查询返回。例如,如果我们只想要字段
id
和字段,lastname
我们可以执行以下查询:最后,请注意,MongoDB 唯一使用 as
PK
的字段是 field_id
,这意味着不能将其他字段设置为Primary Key
。此外,MongoDB 允许您建立任何其他必须满足必要条件才能被视为唯一类型索引的字段,例如
unique index
, (理解为不是)。Primary Key
我希望这能消除你的疑问。