Meine Schemastruktur etwas wie folgt aussieht:Wie ein mongodb Objekt mit mehreren Auswahlkriterien aktualisieren
{
"__v":0,
"_id":ObjectId("5708423e897db8255aaaa9dd"),
"podId":169400000005,
"env":[
{
"type":"1",
"id":3852000000035,
"_id":ObjectId("5708423e897db8255aaaa9de")
},
{
"type":"2",
"id":3852000000040,
"_id":ObjectId("5708423e897db8255aaaa9df")
}
],
"name":"Test Build",
"parameters":[
{
"name":"sound.left",
"type":"1",
"paramName":"Left Sound Control",
"paramType":"booleanParameter",
"testValue":null,
"liveValue":null,
"_id":ObjectId("5708423f897db8255aaaaa0d")
},
{
"name":"sound.right",
"type":"1",
"paramName":"Right Sound Control",
"paramType":"booleanParameter",
"testValue":null,
"liveValue":null,
"_id":ObjectId("5708423f897db8255aaaaa0d")
},
...
]
}
Ich habe 3 bekannte Variablen: podId
für podId
, codeName
für parameters.name
, envType
für parameters.type
. Mit ihnen möchte ich das Objekt unter Verwendung podId
, codeName
und envType
, mit einer neuen Variablen paramValue
, die den testValue
Wert enthält, aktualisieren.
Was ich versucht habe
db.pods.update({
podId: podId,
parameters: {
$elemMatch: {
name: codeName,
type: envType
}
}
}, {
$set: {
'parameters.$.testValue': paramValue
}
});
Ich versuche, die testValue
wo podId == podId
, parameters.name == codeName
und parameters.type == envType
, aber die oben aktualisieren nichts zu aktualisieren.
Ich habe auch versucht
db.pods.update({
podId: podId,
parameters: {
name: codeName,
type: envType
}
}, {
$push: {
parameters: {
testValue: paramValue
}
}
},
function(err) {
if(err) throw err;
});
im Grunde nehmen, was das Objekt zu bauen gearbeitet, wenn ich nur die podId
vergleichen musste, und das Hinzufügen der zusätzlichen Kriterien; Es hat diesmal nicht funktioniert.
bearbeiten: fixed Schematyp Nummer String
'parameter.type' ist eine Zeichenkette. Sind Sie sicher, dass Sie in einer Zeichenkette und nicht in einer Ganzzahl übereinstimmen? d. h. "envType" '1' oder" 1 "'? – BanksySan
Whoops Ich tippte es falsch in meine Frage ein. 'env.type',' parameters.type' und 'envType' sind alle Zeichenfolgen. Ich habe den Beitrag aktualisiert, um das zu berücksichtigen. – sengakae