【问题标题】:Doctrine MongoDB ODM学说 MongoDB ODM
【发布时间】:2013-06-25 23:29:30
【问题描述】:

我正在为 MongoDB 学习 Doctrine 2 ODM,并且有一个直截了当的问题,我无法在 Doctrines 文档或谷歌上找到答案。

假设我在同一个集合中有以下两个文档

{ "_id" : ObjectId("51c8a962f6d6ace76b374219"), 
"X" : 26, 
"Name" : "some name", 
"Level" : "Common"
}
{ 
"_id" : ObjectId("51c8a9bef6d6ace76b37421a"), 
"Y" : 1, 
"Name" : "Other name", 
"Level" : "Common"
}

我知道我可以找到所有具有 Level : Common using 的文档

$dm->getRepository('Search\Model')->findBy(array("Level" => "Common"));

但是我怎样才能找到字段类型为“X”而不是“Y”的所有文档? 我知道我可以全部返回并将其过滤掉,但我应该能够查询这个吗? 因为字段类型 X 和 Y 不同,它们应该在单独的集合中吗?

我还尝试过使用 Doctrine 文档中的查询生成器进行的各种查询,但没有运气。

我真的希望能够返回该集合中只有“X”的所有文档。

非常感谢

【问题讨论】:

    标签: php mongodb doctrine-orm


    【解决方案1】:

    您可以在这里使用否定运算符:

    $dm->getRepository('Search\Model')->findBy(array("X" => 26, "Y" => array('$ne'=>1)));
    

    【讨论】:

    • 感谢您的回复。我真正想要的是找到所有带有 X 字段而不是 Y 的文档。是否有通配符可以用于上面的 X 值....我猜最接近的 SQL 等效项是 SELECT * from TABLE where Column=X
    • @sb12 可以使用$exists,它会判断该字段是否真的存在于文档中:docs.mongodb.org/manual/reference/operator/exists
    • 感谢您的回复。我会认为这样的事情很常见。我允许在文档中使用不同字段的原因是由于 mongo 的无模式性质,因此假设查询是直截了当的。从教义文档中,我找不到返回所需内容的方法。返回集合中的所有文档并处理应用程序中的过滤是最佳做法吗?我猜性能不是问题,因为返回的是游标而不是所有数据?感谢您的帮助
    • @sb12 并不是因为要处理这个客户端,您必须挑选出大量数据,$exists 不是您想要的吗?
    • 它工作正常,谢谢。我需要尽可能多地查阅 mongo 文档和学说文档 :)。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多