mongodb のシーケンス番号を安全に更新する方法で説明されているクエリの PHP バージョンを使用して、複数の配列要素を更新しようとしています。
クエリについて説明します。
db.so.update(
{ _id: new ObjectId("4f55e7ba362e2f2a734c92f8")},
{ $set : { 'subs.1.order' : 3, 'subs.2.order' : 2 } }
);
ドキュメントに「注文」フィールドを追加するクエリを作成しています
{
"_id": {
"$oid": "5209acfd0de2316335000001"
},
"bookListId": "116ad5af-7cc6-4652-9bb3-aea852e584e8",
"favoriteBook": [
{
"title": "One Favorite Book",
},
{
"title": "Another Favorite Book",
},
{
"title": "A Third Favorite Book",
}
]
}
..そしてPHPでそれをやっています
$criteria = array('bookListId' => $bookListId);
$favoriteBookOrder = array();
for($i=0;$i<sizeof($order);$i++) {
$key = 'favoriteBook.'.($i+1).'.order';
$val = $order[$i];
$favoriteBookOrder[] = array($key=>intval($val));
}
$setFavoriteBookOrder = array('$set' => $favoriteBookOrder);
$collection->update($criteria, $setFavoriteBookOrder);
しかし、クエリに配列の正しい構成がないため、これは結果を生成しません..
error_log(json_encode($setupdated));
出力
{"$set":[{"favoriteBook.1.order":2},{"favoriteBook.2.order":1},{"favoriteBook.3.order":3}]}
引用符、配列全体を囲む括弧、および各項目を囲む中括弧が多すぎることに気付いた場合。これがエラーの原因だと思います:
"Invalid modifier specified: $set"
PHPで配列を構築するための正しい構文は何ですか? ありがとう!
編集
これが修正です
$favoriteBookOrder[] = array($key=>intval($val));
should be
$favoriteBookOrder[$key] = intval($val);
また、Mongo インデックスは 0 ベースであるため、$i から +1 を削除しました
今すぐ正しいクエリ
{"$set":{"favoriteBook.0.order":1,"favoriteBook.1.order":2,"favoriteBook.2.order":3}}