1

誰かが私がwhere"name":"gdfgdfgdfg"埋め込みドキュメントを削除するためのmongoクエリを作成するのを手伝ってくれます

以下のようにMongodbに保存されたオブジェクト。

{
    "_id": ObjectId("50656f33a4e82d3f98291eff"),
    "description": "gdfgdfgdfg",
    "menus": [
    {
        "name": "gdfgdfgdfg"**,
        "description": "dfgdgd",
        "text": "dfgdfg",
        "key": "2",
        "onSelect": "yyy",
        "_id": ObjectId("50656f3ca4e82d3f98291f00")
    },
    {
        "name": "dfg",
        "description": "dfgdfgdfgdf",
        "text": "dfgdgf",
        "key": "1",
        "onSelect": "uuuu",
        "_id": ObjectId("50656f44a4e82d3f98291f01")
    }
    ]
}

誰かが私を助けてくれます、私はMongoに不慣れです

4

3 に答える 3

1

JavaScriptシェルでは、次のことができます。

var query = {"_id": ObjectId("50656f33a4e82d3f98291eff")};
db.collection.update(query, {'$pull':{ menus: {name : 'gdfgdfgdfg'} } });

またはIDを使用します。

db.collection.update(query, {'$pull': { menus: {"_id": ObjectId("50656f3ca4e82d3f98291f00")} } });

Javaドライバーでは、次のようになります。

BasicDBObject query = new BasicDBObject("_id", new ObjectId("50656f33a4e82d3f98291eff"));

BasicDBObject docToRemove = new BasicDBObject("name", "gdfgdfgdfg");

BasicDBObject updateCommand = new BasicDBObject("$pull", new BasicDBObject("menus", docToRemove));

collection.update(query, updateCommand);
于 2012-09-28T11:19:18.920 に答える
0

Mongoでは、埋め込まれたドキュメントを削除することはできません。コレクションからオブジェクトを取得し、リスト内の1つのオブジェクトを削除してから、データベースに保存し直す必要があります。

obj = db.collection.findOne({"_id": ObjectId("50656f33a4e82d3f98291eff")});
menus = obj.menus.splice(0,1); // Or some other way to manually delete
                               // the one item in the list
db.collection.update({"_id": ObjectId("50656f33a4e82d3f98291eff")},
                     {$set: {menus: menus}});

複雑です。こちらをご覧ください

編集:インデックスがわからない場合は、これを試すことができます:

obj = db.collection.findOne({"_id": ObjectId("50656f33a4e82d3f98291eff")});
var i = 0;
for(i=0;i<obj.menus.length;i++) {
    if(obj.menus[i].name === "gdfgdfgdfg")
        break;
}
menus = obj.menus.splice(i,1);
db.collection.update({"_id": ObjectId("50656f33a4e82d3f98291eff")},
                     {$set: {menus: menus}});
于 2012-09-28T10:41:05.687 に答える
-1
$conditionArray=array("_id"=>ObjectId("50656f33a4e82d3f98291eff"));
$dataArray=array("description"=>"");
$db->$collectionName->update($conditionArray,array('$unset' =>$dataArray))->limit(1);
于 2012-09-28T10:36:51.630 に答える