这是我的问题,我需要将特定的_id费用引用删除到特定的array member.charges中,并将其从特定的member.id删除到嵌入式文档中。

(我希望我的问题很清楚)。

我尝试这个。



db.branches.update(

    {'members._id':ObjectId("565dc20d338b60720c25e8d0"),
     'members.charges':  ObjectId("565dc20d338b60720c25e8d1")
    },
    {
        $pull:{'members.charges': ObjectId("565dc20d338b60720c25e8d1")  }
    }
);


(分支,是集合的名称)。



但是mongoDB说:

无法使用零件(members.charges的成员)遍历元素。



我的收藏结构是:

{
    "_id" : ObjectId("565dc1cb338b60720c25e8ce"),

    "phone" : "33 2132 1321",
    "address" : "whereever",
    "name" : "Gym2",
    "account_id" : ObjectId("565dc1ad338b60720c25e8cc"),
    "visits" : [],
    "members" : [
        {
            "name" : "Test User",
            "package" : ObjectId("565dc1f9338b60720c25e8cf"),
            "address" : "Sur 113 A No 429",
            "phone" : "32 1321 3232",
            "contactPhone" : "32 3213 1231",
            "email" : "[email protected]",
            "pendingCharges" : true,
            "_id" : ObjectId("565dc20d338b60720c25e8d0"),
            "created" : ISODate("2015-12-01T15:51:41.187Z"),
            "charges" : [
                ObjectId("565dc20d338b60720c25e8d1")
            ],
            "active" : true
        },
        {
            "name" : "Test user 2",
            "package" : ObjectId("565dc1f9338b60720c25e8cf"),
            "address" : "whereever",
            "phone" : "32 1321 3232",
            "contactPhone" : "32 3213 1231",
            "email" : "[email protected]",
            "pendingCharges" : true,
            "_id" : ObjectId("565dc22b338b60720c25e8d2"),
            "created" : ISODate("2015-12-01T15:52:11.581Z"),
            "charges" : [
                ObjectId("565dc22b338b60720c25e8d3")
            ],
            "active" : true
        }
    ],
    "packages" : [
        ObjectId("565dc1f9338b60720c25e8cf")
    ]
}

最佳答案

您需要告知更新在拉members元素时要查找哪个charges数组元素。您可以使用positional $运算符来完成此操作,该运算符表示查询中匹配的members数组元素的索引:

db.branches.update(

    {'members._id':ObjectId("565dc20d338b60720c25e8d0"),
     'members.charges':  ObjectId("565dc20d338b60720c25e8d1")
    },
    {
        $pull:{'members.$.charges': ObjectId("565dc20d338b60720c25e8d1")  }
    }
);

08-19 14:19