我是mongoDB的新手,我看到了很多例子,但大多数都展示了如何使用集合。
我在数据库名称myDB
下跟踪了存储在mongoDB中的数据:
"_id" : "some_table_name",
"content" : [{
"id" : "1",
"loctype" : "Clinic/Hospital",
"locname" : "KKH"
}, {
"id" : "2",
"loctype" : "Clinic/Hospital",
"locname" : "Singapore National Eye Centre"
}
}]
}
如您所见,模型包含_id
和content
,其中content
是对象列表:
... ,
{
"id" : "ZZZ",
"loctype" : "ZZZ",
"locname" : "ZZZ"
},
...
PHP
$m = new MongoClient(/* ... */);
$db = $m->myDB;
$collection = $db->coll;
我如何获取PHP的ID列表? a.e [1,2]
在我的情况下。
我确实可以获得所有模型和提取ID,但我尝试从mongoDB直接进行。
感谢。
答案 0 :(得分:2)
试试这个:
$collection = new MongoCollection($db, 'collection_name');
$query = array(
// Some restrictions can be here
);
$ids = array();
$cursor = $collection->find($query);
foreach ($cursor as $doc) {
$doc = (array) $doc;
$ids[] = $doc["id"];
}
var_dump($ids);
答案 1 :(得分:2)
这取决于您希望如何格式化,但这里是一个聚合版本,它以一种很好的方式格式化它:
$mongo->collection->aggregate(array(
array('$unwind'=>'$content'),
array('$project'=>array('_id'=>'$content.id'))
))
它将打印如下文件:
[
{_id:1},
{_id:2}
]
另一种方法是使用$db->collection->find(array(),array('content.id'=>1))
我应该注意,在PHP中最好这样做。通过PHP是您可以获得我相信的确切输出的唯一方法。
答案 2 :(得分:1)
使用mapreduce后跟distinct,如下所示:
mr = db.runCommand({
"mapreduce" : "things",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) { return null; },
"out": "things" + "_keys"
})
db[mr.result].distinct("_id")
["foo", "bar", "baz", "_id", ...]
或使用Variety ...