通过嵌套元素查询MongoDb文档

时间:2015-03-01 06:25:30

标签: php mongodb mongodb-query database

我试图找到使用PHP删除mongoDB记录的语法,但我在互联网上找到的每个例子都只显示了如果删除标准是一个级别的方法...

所以如果我有这样的mongoDB记录:

{ 
        "_id" : ObjectId("50d69d6a1d26a8a0c1eaecf8"), 
        "name" : "John",
        ...other fields...

我可以使用以下语法删除它:

$collection->remove(array('name' => 'John'));

这很好,但我的问题是我需要查找删除的密钥是另一个级别。

所以我的记录看起来像这样:

{
    "_id" : ObjectId("54f2aaa3452a235c049000029"),
    "synthOrder" : {
        "orderId" : "899422",
        ...other fields...

我想删除orderId所说的记录,899422。 那么我的删除行会是什么样的呢?

我试过了:

$collection->remove(array('synthOrder' => array('orderId' => '899422')));

我觉得这是一个简单的语法问题,但我无法在网上找到任何示例。我很感激任何指针!

1 个答案:

答案 0 :(得分:2)

这很简单,但也许是一种解释。您正在尝试的查询只匹配看起来完全相同的文档:

{
    "synthOrder": {
        "orderId": "899422"
    }
}

意味着嵌套元素中只有“one”元素,因为这是你的语法实际要求的。

出于这个原因,MongoDB使用"dot notation"来引用各个嵌套元素:

$collection->remove( array( 'synthOrder.orderId' => '899422'));

这允许在没有看起来像“显式”文档的情况下进行引用,这是您在所尝试的表单中所做的。