Php 获取在元素的特定字段上具有最小值的数组元素

Php 获取在元素的特定字段上具有最小值的数组元素,php,mongodb,Php,Mongodb,我试图从集合中的数组中删除元素。要删除该元素,我必须查看索引(或日期)字段,并删除值最低的字段。我的集合名为“pages”的示例表示: 我需要从posts数组中删除此元素: { "postId": { "$oid": "52e12e5933a9fbec1100002d" }, "date": 1390489177.267876, "index": 1

我试图从集合中的数组中删除元素。要删除该元素,我必须查看索引(或日期)字段,并删除值最低的字段。我的集合名为“pages”的示例表示:

我需要从posts数组中删除此元素:

        {
            "postId": {
                "$oid": "52e12e5933a9fbec1100002d"
            },
            "date": 1390489177.267876,
            "index": 1
        }
无论我做什么,我都无法在数组中找到最小的“索引”字段。我要编写的最后一段php代码如下:

$this->db->pages->find(array( 'skilltag' => 'Bilardo'), array('posts.index' => 1))->sort( array("posts.index" => -1));
我不愿意使用“索引”字段和“当前索引”字段。但我把它们放在任何地方,以防无法处理具有时间戳值的“date”字段

上述代码返回一个仅包含一个元素的数组,该数组包含两个元素:

        {
            "postId": {
                "$oid": "52e12e5933a9fbec1100002d"
            },
            "date": 1390489177.267876,
            "index": 1
        },
        {
            "postId": {
                "$oid": "52e12e5f33a9fb141800002c"
            },
            "date": 1390489183.277084,
            "index": 2
        }

难道没有一个聚合函数在数组中进行过滤吗?我找不到任何返回最小值的聚合。我只发现聚合返回用户必须给出的最小值和最大值之间的值,这在我的情况下不起作用。

您的
帖子中的嵌入对象是否总是按其
日期和
索引
升序排列?根据您的模式,我假设新的帖子是通过update操作符添加到文档中的

如果要删除的元素始终位于数组的前面,则可以很容易地使用来删除它

        {
            "postId": {
                "$oid": "52e12e5933a9fbec1100002d"
            },
            "date": 1390489177.267876,
            "index": 1
        },
        {
            "postId": {
                "$oid": "52e12e5f33a9fb141800002c"
            },
            "date": 1390489183.277084,
            "index": 2
        }