2012-02-10 90 views
0

拉元件I具有以下模式:mongodb的從陣列

{ 
    "_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」:[] }

我在做什麼錯了,更重要的是什麼笑我確實只需要拉一些元素?

回答

2

我認爲你的查詢很好,問題是你使用的日期。

相反的:

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") 

至少,這就是我在我的外殼中看到的。使用「new」將返回一個匹配數組中兩個元素的日期,所以它們都被刪除。使用ISODate直接創建您要查找的日期對象,並且只匹配第一個結果。

的日期構造函數接受從零開始的一個月,所以你要這個,如果你想使用新:

new Date(2012, 0, 1)