0

編集:

ドキュメントの構造:

{"tags" : ["a"], "name" : "a", "creator" : "Nick here", "users" : [ "Nick here"], "connected" : 1, "ra" : 0.3967885102611035, "_id" : ObjectId("513c3e42071a103c09000003")}

MongoDB$pull演算子に問題があります。配列から値を削除することはありません。これが私の質問です:

db.rooms.update({users: ["Nick here"]},{$pull: {users: ["Nick here"]}})

ユーザーフィールドは次のようになります。

(...),"users" : [ "Nick here" ],(...)


私がこのように書くと:

db.rooms.update({users: "Nick here"},{$pull: {users: ["Nick here"]}})

また

db.rooms.update({users: "Nick here"},{$pull: {users: "Nick here"}})

エラーが返されます:

$ pull /$pullAll修飾子を非配列に適用できません


それらのクエリの何が問題になっていますか?「users」フィールドが空のときに、ユーザーのニックネームをプル/プッシュしてドキュメントを削除したい。

よろしくお願いします、Michał

4

1 に答える 1

1

テストを書きました…構文を確認してください。クエリ:

db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}})

クエリに含まれている可能性があります{ multi: true }。例えば:

db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}}, { multi: true })

完全なログ:

MongoDB shell version: 2.2.3
connecting to: so
> db.rooms.insert({"tags" : ["a"], "name" : "a", "creator" : "Nick here", "users" : [ "Nick here"], "connected" : 1, "ra" : 0.3967885102611035, "_id" : ObjectId("513c3e42071a103c09000003")} )
> db.rooms.findOne()
{
    "_id" : ObjectId("513c3e42071a103c09000003"),
    "tags" : [
        "a"
    ],
    "name" : "a",
    "creator" : "Nick here",
    "users" : [
        "Nick here"
    ],
    "connected" : 1,
    "ra" : 0.3967885102611035
}
> db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}})
> db.rooms.findOne()
{
    "_id" : ObjectId("513c3e42071a103c09000003"),
    "connected" : 1,
    "creator" : "Nick here",
    "name" : "a",
    "ra" : 0.3967885102611035,
    "tags" : [
        "a"
    ],
    "users" : [ ]
}
>
于 2013-03-10T11:19:40.993 に答える