2017-01-27 4 views
0

Das Problem beim Schreiben dieser gefunden.
Da es anderen helfen kann, nicht an der richtigen Stelle wie ich zu suchen, finden Sie die Antwort unten.
Update von ID mit Mungo findet das Dokument nicht

Ich kann nicht scheinen, einen Mungo Model.update() Anfrage Arbeit zu machen, wenn ein Model.findOne() mit dem gleichen Zustand der Fall ist.

, hier Zur Veranschaulichung ist mein Code:
Schema:

var GeolocSchema = new mongoose.Schema({ 
    id: { 
    type: String, 
    required: true, 
    unique: true 
    }, 
    count: Number 
}); 

Eine Express-Teststrecke, die scheinbar gebrochen update Versuch zeigt:

router.get('/test', function(req, res, next) { 
    var doc = { 
    id: '50_633-20_059', 
    count: 3, 
    density: 1 
    }; 

    var promise = Geoloc.update({ 
    id: doc.id 
    }, { 
    $set: { 
     density: doc.density 
    } 
    }).exec(); 

    promise.then((result, err) => { 
    if (err) return next(err, null); 
    res.status(201).json(result); 
    }); 
}); 

Ergebnisse in:

{ 
    "ok": 0, 
    "n": 0, 
    "nModified": 0 
} 

Eine Express-Teststrecke den Arbeits findOne Aufruf zeigt:

router.get('/test2', function(req, res, next) { 
    var doc = { 
    id: '50_633-20_059', 
    count: 3, 
    density: 1 
    }; 

    var promise = Geoloc.findOne({ 
    id: doc.id 
    }).exec(); 

    promise.then((result, err) => { 
    if (err) return next(err, null); 
    console.log('Update result: ', result); 
    res.status(200).json(result); 
    }); 
}); 

Ergebnisse in:

{ 
    "_id": "5885d33239f30034de9a38d0", 
    "id": "50_633-20_059", 
    "count": 3, 
    "__v": 0, 
} 

Antwort

0

Credits this unaccepted answer für bringt mich auf dem richtigen Weg.

Der Schuldige war mein Schema.
Interessanterweise (für eine schemafreie Datenbank) kann eine Aktualisierungsoperation für nicht vorhandene Felder nicht durchgeführt werden: wahrscheinlich ein Fail-Safe, um eine DB-Flut von einer externen Quelle zu verhindern.
Beachten Sie, dass es wie erwartet über die Mongo CLI funktioniert.

was bedeutet, dass die einzige notwendige Änderung im Code über die folgende war:

Schema:

var GeolocSchema = new mongoose.Schema({ 
    id: { 
    type: String, 
    required: true, 
    unique: true 
    }, 
    count: Number, 
    density: Number // This is mandatory! 
}); 

Mehr Infos here.

Verwandte Themen