搜索mongo集合时的点符号参数

时间:2016-10-11 16:36:15

标签: javascript node.js mongodb

我有点奇怪的情况。问题是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'}}])

如何在我的Node.js服务电话中构建我的queryObj

我试过这样的事情:

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;
}

但它失败了,因为我在链中的undefined值上引用了params。

有什么建议吗?

1 个答案:

答案 0 :(得分: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';