2016-10-11 7 views
0

Ich habe ein bisschen komische Situation. Das Problem ist, dass einige der Parameter in mongo Sammlung tief in Objekte definiert.Punktnotation Params beim Suchen Mongo-Sammlung

zum Beispiel (meine Situation jetzt). wenn ich von id

db.collection.aggregate([{$match: {id: '1234567'}}]) 

so meine queryObj sieht wie folgt in Knoten Service-Seite zu suchen:

let queryObj = { $match: { id: customerId } }; 

aber jetzt gibt es eine andere param providerID, die ich in Betracht aggregate

nehmen müssen So sieht es in der Mongo-Abfrage aus (und das läuft gut):

db.getCollection('mydb').aggregate([{$match:{id:'31250044805', 'value.transactionDetail.medicalClaim.claimHeader.value.provider.providerNumber.providerID':'42344'}}]) 

Wie baue ich meine queryObj jetzt in meinem Node.js Service-Aufruf?

habe ich versucht, so etwas wie dieses:

if(providerId) { 
    queryObj['$match]'['value']['transactionDetail']['medicalClaim']['claimHeader']['value']['provider']['providerNumber']['providerID'] = providerID; 
} 

ich auch versucht:

if(providerId) { 
    queryObj.$match.value.transactionDetail.medicalClaim.claimHeader.value.provider.providerNumber.providerID = providerID; 
} 

aber es funktioniert nicht, weil ich params auf undefined Werte in der Kette am referenzieren.

Irgendwelche Vorschläge?

Antwort

0

Sie können Object.assign verwenden, um Objekte zu einem Objekt hinzuzufügen.

let queryObj = { $match: { id: customerId } }; 
if(providerId) { 
    Object.assign(queryObj.$match, {'value.transactionDetail.medicalClaim.claimHeader.value.provider.providerNumber.providerID': '1234'}); 
} 

Oder einfach durch die Klammer-Notation:

queryObj.$match['value.transactionDetail.medicalClaim.claimHeader.value.provider.providerNumber.providerID'] = '1234'; 
Verwandte Themen