2013-08-29 31 views
6

Schemat bazy danych:Jak usunąć pole z dokumentu

{ 
    _id: "kun2", 
    result150160: [10,20,30]; 
    moon: 4 
} 

Chcę usunąć całą result150160 pola przez klienta ze zmienną:

var deleteresult = "result150160" 
Box.update({_id: this._id} , {$unset: { deleteresult } }); 

Odpowiedz

1

można zrobić:

var deleteresult = {}; 
deleteresult["result150160"] = true 
Box.update({_id: this._id} , {$unset: deleteresult }); 

Zasadniczo musisz użyć pary klucz-wartość, nie ma znaczenia, czego używasz do true, tak długo, jak tam coś jest.

+0

To nie działa i nie chcę ciąg w zapytaniu, ponieważ result150160 był przykładem i może też być inny ciąg :) – Sebastian

+0

Lekko zmodyfikowałem składnię, możesz użyć dowolnego ciągu znaków. Proszę również sprawdzić konsolę javascript, ponieważ może to być również coś, co powoduje, że nie działa (uprawnienia '.allow' lub nie ma poprawnie wpisanego' _id'a). – Akshat

12

Poprawna składnia jest taka:

Box.update({_id: this._id} , {$unset: { deleteresult : "" } }); 

Musisz określić wartość operacji $unset: { deleteresult : "" }. Nawet jeśli jest pusty.

kasie relevant docs:

db.collection.update({ field: value1 }, { $unset: { field1: "" } });
Powyższy przykład usuwa Field1 w kolekcji z dokumentów, gdy pole ma wartość VALUE1. Wartość pola w instrukcji $ unset (tj. "" Powyżej) nie ma wpływu na operację.

+0

Sprawdziłem twoją składnię kilka minut temu, ale nie robi tego ". t działa też – Sebastian

+0

To jest poprawna składnia do użycia - widać to od linku do dokumentów, które zawarłem. Jesteś pewien, że problemy nie leżą gdzieś w twoim kodzie? Czy 'Box' faktycznie odnosi się do kolekcji? Czy atrybut "_id" jest poprawny? – Lix

+0

@ Sbastian próbowałeś uruchomić polecenie w konsoli meteo mongo. jeśli to działa, to masz uszkodzony kod. – booyaa

1

Spróbuj to powinno działać dla Ciebie:

var deleteresult = "result150160";  
var updateQuery={$unset:{}}; 
updateQuery.$unset[deleteresult]=1; 
Box.update({_id: this._id} ,updateQuery,false,true); 
Powiązane problemy