首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP () MongoClient查询限制返回字段

使用PHP () MongoClient查询限制返回字段
EN

Stack Overflow用户
提问于 2015-02-16 16:02:39
回答 1查看 1.5K关注 0票数 0

我正在编写一个MongoClient模型,该模型访问mongodb,该模型使用gitlab信息、服务器主机和zend指令存储部署日志。我有一个叫deployAppConfigs的芒果收藏。其文档结构如下所示:

代码语言:javascript
复制
{
"_id" : ObjectId("54de193790ded22d1cd24c36"),
"app_name" : "ai2_api",
"name" : "AI2 Admin API",
"app_directory" : "path_to_app",
"app_owner" : "www-data:deployers",
"directories" : [],
"vcs" : {
    "type" : "git",
    "name" : "input/ai2-api"
},
"environments" : {
    "development" : {
        ... 
    },
    "qa" : {
        ...
    },
    "staging" : {
        ...
    },
    "production" : {
        ...
},
"actions" : {
    "post_checkout" : [ 
        "composer_install"
    ]
}

}

因为这个集合中有很多文档,所以我只想查询整个集合中的"vcs“子文档"app_name"。我能够使用以下find()查询在Robomongo的mongo中执行此命令:

代码语言:javascript
复制
db.deployAppConfigs.find({}, {"vcs": 1, "app_name": 1})

这将准确地返回集合中每个文档所需的内容:

代码语言:javascript
复制
{
"_id" : ObjectId("54de193790ded22d1cd24c36"),
"app_name" : "ai2_api",
"vcs" : {
    "type" : "git",
    "name" : "input/ai2-api"
}

}

我在编写相当于mongo命令的PHP命令时遇到了问题。基本上,我想在这个mongo文档示例中创建一个PHP MongoClient版本,在限制从查询返回的字段上我尝试使用一个空数组来替换MongoClient命令中的"{}“,但是它没有工作:

代码语言:javascript
复制
$query = array (
    array(), 
    array("vcs"=> 1, "app_name"=> 1)
);

所有字段都共享vcs.type = "git",因此我尝试编写一个查询,根据该共享值选择每个文档中的所有字段。看起来是这样的:

代码语言:javascript
复制
$query = array (
   "vcs.type" => "git"
);

但是这会返回整个文档,这正是我想要避免的。

另一种方法可以是对集合中的第一个文档执行极限投影find(),然后使用MongoCursor迭代整个集合,但如果可能的话,我不希望执行额外的循环。

本质上,我是问如何将find()查询的返回字段限制为整个集合中每个文档的一个子文档。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 16:17:16

看来我找到了解决办法..。我会解决这个问题,如果它最终对其他人有用的话,我就不提了。

最后我要做的是修改我的MongoClient自定义类find()函数,它调用$collection->find()查询,以包含一个$fields参数。

现在,MongoClient->find()查询如下所示:

代码语言:javascript
复制
$collection->find(
    array("vcs.type" => "git"),
    array("vcs" => 1, "app_name" = 1)
)

在MongoClient::cursor::find():这里上找到答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28545485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档