2016-10-11 1 views
0

У меня немного странная ситуация. Проблема в том, что некоторые из параметров в коллекции mongo определяют глубину внутри объектов.точка обозначение params во время поиска коллекция mongo

например (мой положение дел сейчас). если искать по id

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

так мой queryObj выглядит в стороне сервиса Node:

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

но теперь есть еще один пары providerID, что мне нужно принять во внимание, чтобы aggregate

Вот как это выглядит в запросе Mongo (и это отлично работает):

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

Как мне построить мой queryObj сейчас в моем сервисном вызове Node.js?

Я пытался что-то вроде этого:

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

Я также попытался:

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

но он не потому, что я ссылки Params на undefined значений в цепи.

Любые предложения?

ответ

0

Вы можете использовать Object.assign, чтобы добавить реквизит к объекту.

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

Или просто с помощью брекет обозначения:

queryObj.$match['value.transactionDetail.medicalClaim.claimHeader.value.provider.providerNumber.providerID'] = '1234'; 
Смежные вопросы