Вставка, InsertOne или upsert с пользовательским _id в MongoDB PHP - PullRequest
0 голосов
/ 26 августа 2018

Что необходимо

Я получаю веб-крюк с объектом JSON с уникальными id с, которые используются для ссылки на этот конкретный объект позже (это идентификаторы заказа на покупку), например:

$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"
    }
);

Я пытаюсь вставить объект JSON в качестве документа и установить внутреннее значение id объекта JSON в качестве документа MongoDB _id.

Мне нужно сделать это, потому что я хочу, чтобы значение id вставленных документов было уникальным ключом / идентификатором в коллекции MongoDB.

Так что, когда я пойду обновлять этот объект позже:

$json_assoc_array = array (
    {
        'id' => "unique-id-1",
        'key_one' => "new value",
        'key_two' => "some value",
        'key_three' => "some value"
    },
    {
        'id' => "unique-id-2",
        'key_one' => "some value",
        'key_two' => "new value",
        'key_three' => "some value"
    },
    {
        'id' => "unique-id-4",
        'key_one' => "some value",
        'key_two' => "some value",
        'key_three' => "some value"
    }
);

, мне нужно будет обновить документ id = 1 с помощью new value в key_one,документ id = 2 с new value в key_two и вставьте документ id = 4 в качестве нового документа.

Что я пробовал

$json_assoc_array = json_decode($data, true);
$my_id = $json_assoc_array['id'];
$collection = $mongo->$mongo_db_name->products;

// The below works but it end up inserting the object as
// {
//     "_id": "5b821dfe3e2ffc4581116b24",
//     "id": unique-id-1,
//     "title": "\"Bubble Bumps\" Pipe",    //
//     ...
// }
// while the _id also needs to be `unique-id-1` from $json_assoc_array['id']
$result = $collection->insertOne($json_assoc_array);

// but this doesn't
$result = $collection->insertOne(array('_id' => my_id), $json_assoc_array);

// neither does this
$result = $collection->update(array('_id' => my_id), $json_assoc_array, ['upsert' => true]);

Как настроить MongoDB уникальным_id как id объекта, чтобы я мог позже обновить документы по id

объекта
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...