私の問題は、フォームを送信してMongoDBに記録するときです。PHP MongoDBの更新時にフィールドが設定されていない
更新を使用してドキュメントに新しいフィールドを追加できます。値とキーを変更できますが、削除/設定解除できません。
私はかなりMongoを新しくしています。私は通常、スタックを使って作業します:MySQL + PHP + Bootstrapですが、生産上の理由から、Mongoを方程式に追加する必要があります。
{
"_id": ObjectId("58a44a61e09075e805d63af1"),
"en": "Cat",
"de": "Katze",
"fr": "Chat",
}
またはこの方法:
{
"_id": ObjectId("58a44a61e09075e805d63af1"),
"en": "Cat",
"de": "Katze",
"es": "Gato",
}
を提出する時には、私はこのようにそれを編集することができます:ここでは
は私のコレクションの文書がどのように見えるかです
{
"_id": ObjectId("58a44a61e09075e805d63af1"),
"en": "Cat",
"de": "Katze",
"es": "Gato",
"fr": "Chat",
}
しかし、私はこれをすることができません:
{
"_id": ObjectId("58a44a61e09075e805d63af1"),
"en": "Cat",
"de": "Katze"
}
は、ここに私のフォームです:
<form role="form" action="" method="post">
<table>
<?php
foreach ($glossary as $term) {
foreach (array_slice($keys,1) as $key => $value) {
echo "<tr id='language" . $key . "' class='languages'>";
echo "<td>";
echo "<select class='form-control' name='lang" . $key . "'>";
echo "<option value='' selected></option>";
// Options not shown for simplicity.
echo "</select>";
echo "</td>";
echo "<td>";
echo "<input class='form-control' value='$term[$value]' name='langInput" . $key . "'>";
echo "</td>";
echo "</tr>";
}
}
}
?>
</table>
<input type="submit" name="submit" class="btn btn-primary" value="Save Changes">
では、私が提出:
$termArray = array();
// Get submitted form vars
for ($i = 0; $i <= $loop; $i++) {
$langCode = cleanFormFld($_POST["lang".$i]);
$termArray[$langCode] = cleanFormFld($_POST["langInput".$i]);
}
try {
$connection = new Mongo("mongodb://$dbhost");
$db = $connection->$dbname;
$db->terms->update(array('_id' => new MongoId($id)), array('$set' => $termArray));
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
すべてlangXとlangInputXはjQueryのでdinamicaly作成されます。
多分私は混乱しているかもしれませんが、あなたは['$ pull'](https://)を必要とします。 docs.mongodb.com/manual/reference/operator/update/pull/)配列の要素を取り除く '$ set'の代わりに –
hdをありがとうが、私はちょうど$ pullを使用しましたが、何も起こりませんでした。 – anexo