【问题标题】:mongodb pull element from arraymongodb从数组中拉取元素
【发布时间】:2012-05-08 06:42:33
【问题描述】:

我有以下架构:

{
  "_id" : 27,
  "n" : [{
      "d" : new Date("Sat, 24 Dec 2011 17:03:00 GMT +04:00"),
      "e" : ObjectId("4f0aef5346b3b88013000001"),
      "f" : [26, 10, 16],
      "k" : new Date("Mon, 09 Jan 2011 17:44:51 GMT +04:00"),
      "t" : "f",
      "u" : 10
    }, {
      "a" : ObjectId("4f0c208846b3b8140f000000"),
      "d" : new Date("Tue, 10 Jan 2012 15:27:21 GMT +04:00"),
      "p" : [ObjectId("4f0c209046b3b8340f000000"), ObjectId("4f0c209346b3b8340f000001"), ObjectId("4f0c209646b3b8340f000002"), ObjectId("4f0c209946b3b8340f000003")],
      "t" : "p",
      "u" : 10
    }]
}

如果至少有一个满足它,则此查询将删除所有子元素

db.newsFeed.update({ "_id" : 27, },{
$pull : {
 'n' : {
    'd' : {
        $lte : new Date(2012, 1, 1)
        }
    }
}
});

所以文件变成了这样, { “_id”:27, “n”:[] }

我做错了什么,更重要的是我应该怎么做才能只提取一些元素?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我认为您的查询没问题,问题是您使用的日期。

    代替:

    new Date(2012, 1, 1)
    

    试试:

    ISODate("2012-01-01")
    

    尝试自己在 shell 中输入它们,你会得到这些结果:

    > new Date(2012, 1, 1)
    ISODate("2012-02-01T07:00:00Z")
    
    > ISODate("2012-01-01")
    ISODate("2012-01-01T00:00:00Z")
    

    至少,这是我在 shell 中看到的。使用“新”返回与数组的两个元素匹配的日期,因此它们都被删除。使用 ISODate 直接创建您要查找的日期对象,并且只匹配第一个结果。

    Date 构造函数采用从零开始的月份,所以如果你想使用 new,你需要这个:

    new Date(2012, 0, 1)
    

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2017-12-22
      相关资源
      最近更新 更多