Выберите записи, в которых не указан ключ

Предположим, что у меня есть куча записей в документе:

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 собственности, потому что это делает мою базу данных незаметной. Как я могу это сделать? Я пробовал с null а также undefined но это не работает.

2 ответа

Решение

Это возможно с использованием $ Существует:

db.document.remove( { name : { $exists : false } } );
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"
}
Другие вопросы по тегам