我正在接收和存储一个JSON对象数组,如下所示:
$json_assoc_array = array (
{
'id' => "unique-id-1",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
{
'id' => "unique-id-2",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
{
'id' => "unique-id-3",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
}
); 稍后,我将以相同的格式接收对这些对象的更新。我需要通过对象/文档的id字段来更新它们。
当我用一个简单的MongoDB将它们插入到insertMany中时,它们也会得到唯一的MongoDB对象_id,因此生成的文档如下所示:
$json_assoc_array = array (
{
'_id' => "5b824c113e2ffc4e7239bfc5"
'id' => "unique-id-1",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
{
'_id' => "5b824c1b3e2ffc4e7239caa2"
'id' => "unique-id-2",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
{
'_id' => "5b824c1b3e2ffc4e7239caa3"
'id' => "unique-id-3",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
}
); id unique-id-1将永远不会有另一个文档。因此,我现在先设置它们,然后插入它们,如下所示:
$json_assoc_array = json_decode($data, true);
// Set order MongoDB _id
$json_assoc_array['_id'] = $json_assoc_array['id'];
// Set MongoDB collection
$collection = $mongo->mongo_db_name->collection;
// Insert documents into MongoDB
$result = $collection->insertMany( $json_assoc_array );
// Now when I insert the above documents, they result in this
$json_assoc_array = array (
{
'_id' => "unique-id-1"
'id' => "unique-id-1",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
{
'_id' => "unique-id-2"
'id' => "unique-id-2",
'key_one' => "some value",
'key_two' => "some value",
'key_three' => "some value"
},
...
); 有什么原因可以解释为什么这是不好的做法吗?
我是否应该让_id由MongoDB设置,并使用id字段来更新现有的文档?
发布于 2018-08-27 08:55:00
除了是不可变的之外,您可以任意使用数组的条形图。
甚至可能对你有利。使用精心编制的索引和查询,您可能可以从索引交叉(在查询中使用了多个索引)中获益。这本身就为您提供了更多的选项来高效地建模您的数据,但让我们暂时搁置这个方面。更有趣的一点是,如果您只需要由索引覆盖的文档字段的子集,则可以使用无法避免的索引,使相应的查询“覆盖”(仅从通常保存在RAM中的索引中回答)。
tl;dr: ObjectId只是一个构造,可以在数据不提供的情况下提供一个全局唯一标识符。我个人认为最好的做法是使用一些具有语义价值的东西而不是ObjectId。
https://stackoverflow.com/questions/52030967
复制相似问题