2013-08-16 68 views
1

選擇項假設,我有一堆條目的文件中:不指定鍵

db.document

,其中一些不具備的一些關鍵,讓我們說的名字。所以我們有兩種類型的條目 - 有和沒有名字。

{ "_id" : ObjectId("4dea81a8bd2bb0323800002d"), "fetched_at" : ISODate("2013-08-02T17:41:30Z"), "keyword" : "110770", "name" : "SOME NAME" }

{ "_id" : ObjectId("4dea81a8bd2bb0323800002a"), "fetched_at" : ISODate("2013-08-02T17:44:17Z"), "keyword" : "125176" }

我想刪除所有條目,而不name屬性,因爲它使我的數據庫incosistent。我怎樣才能做到這一點?我試着用nullundefined但它不起作用。

回答

3

有可能使用$exists

db.document.remove({ name : { $exists : false } }); 
0
db.document.remove({ name : null }) 

應該工作了。例如:

> db.document.insert({"fetched_at" : ISODate("2013-08-02T17:41:30Z"), "keyword" : "110770", "name" : "SOME NAME"}) 
> db.document.insert({"fetched_at" : ISODate("2013-08-02T17:44:17Z"), "keyword" : "125176" }) 
> db.document.insert({"fetched_at" : ISODate("2013-08-02T17:44:17Z"), "keyword" : "125176" }) 
> db.document.find().size() 
3 
> db.document.remove({name:null}) 
> db.document.find().size() 
1 
> db.document.find().pretty() 
{ 
    "_id" : ObjectId("520eac7e5d0ee1aa8515a550"), 
    "fetched_at" : ISODate("2013-08-02T17:41:30Z"), 
    "keyword" : "110770", 
    "name" : "SOME NAME" 
}