Używam stosu Średnia. Czuję się nieswojo w tym nowym i mam się w marynacie. Widziałem przykłady aktualizowania rekordów za pomocą set lub push, ale ponieważ próbuję zaktualizować jeden obiekt Json wewnątrz obiektu json w tablicy obiektów json mam problemy.MongoDB. Jak zaktualizować właściwość json wewnątrz tablicy
Rozważmy następujący schematu
token: {
type: String,
required: "FB access token required."
},
fbId: {
type: String,
required: "FB id required.",
unique: true
},
accounts: {
type: Array,
default: []
}
Moje konta tablica składa się z obiektów JSON z których każdy wygląda tak:
{
"name": "some name",
"credentials": {
"username": "some username",
"password": "some password"
}
Próbuję aktualizowanie kont każdym razem, gdy użytkownik dodaje nowy. Tak więc w tym przypadku mogę użyć $ push w porządku. Ale nie chcę duplikatów nazw, a $ push nie działa tutaj. Więc próbowałem użyć $ set, ale $ set nie wstawia obiektów z nowymi nazwami do kont. Więc próbowałem użyć upsert: true z $ set, ale teraz otrzymuję podwójne błędy.
Oto przykład, w którym próbuję zindeksować nazwę na kontach. Zakładam, że trochę zawracam sobie pytanie.
var name = "some name";
var fbId = "some fb Id";
var token = "some token";
var username = "some other username";
var password = "some other password";
var query = {
fbId: fbId,
token: token,
"accounts.name":name
};
var update = {
$set: {
accounts: [{
name: name,
credentials: {
username: username,
password: password
}
}]
}
};
var options = {
upsert: true
};
User.update(query, update, options,
function (err, numberAffected, rawResponse) {
//handle it
});
);
Podsumowując moje pytanie, czy rozsądnie jest myśleć, że mogę zaktualizować to jednym połączeniem, a jeśli tak, to w jaki sposób? Czy powinienem znaleźć obiekt, wymienić jego wartości, a następnie ponownie umieścić w bazie danych?
Otrzymywanie następującej odpowiedzi na błąd. Operator pozycyjny nie znalazł dopasowania z zapytania. Nieaktualizowana aktualizacja: konta. $ – zafrani
Och, musisz również ustawić flagę upsert na true. – ZeMoon
To było. Kiedy komentuję flagę upsert, nie dostaję błędów, ale również niczego nie aktualizuję. – zafrani