10

我主要关心的是在 mongodb 文档中他们使用$elemMatch命令从数组中查找和拉取元素,但这在我使用时不起作用。我的文档结构是

{
"_id" : ObjectId("55dea445c3ad8cac03a7ed8e"),
"email" : "james@user.com",
"groups" : [ 
    {
        "_id" : ObjectId("55dea4a4c3ad8c8005a7ed8f"),
        "name" : "All Group"
    }
]}

我想使用 mongodb 查询从文档中删除组。我的查询是:

db.users.update({"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
{$pull: {"groups": {$elemMatch: {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}})

执行查询后,用户文档未更新,组值仍然存在。我正在关注 mongodb 文档:http ://docs.mongodb.org/v2.6/reference/operator/update/pull/

4

1 回答 1

17

你不需要$elemMatch$pull. 它的参数基本上是对数组本身的“查询”:

db.users.update(
    {"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
    { "$pull": { "groups": {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}
)

所以在查询$pull中的工作方式很$elemMatch有效,它自己的参数被视为数组子文档元素中的查询。

它已经在查看单个数组元素,这与文档中查看整个数组的“查询”部分不同。

于 2015-08-27T06:52:23.587 回答