我根据用户对条件的输入生成查询。用户可以通过选择来设置自定义过滤。
到目前为止,一切都还好。例如,这有效:
exports.getJoinedTransactions = function(firmId, page, pageSize, billerId, matterId, words, billingStatus, cb) {
let firmIdToObjId = new mongoose.Types.ObjectId(global.user.firmId);
let query = { firmId: firmIdToObjId };
if ( typeof billerId === "object" ) {
billerId = new mongoose.Types.ObjectId(billerId);
query.contactId = billerId;
}
if ( typeof matterId === "object" ) {
matterId = new mongoose.Types.ObjectId(matterId);
query.matterId = matterId;
}
....
myAggregate = [
{ $sort: { date: -1 } },
{
$match: query
},
....
Transactions.aggregate(myAggregate).exec( function(err, transactions) {
if (err) {
console.log(err);
}
someVar = transactions.length;
....
这可以很好地构建查询并运行良好。但是,现在添加到列表的要求略有不同。我想还包括null或非null的可能查询。像这样:
if (typeof billingStatus === "string" && billingStatus != "") {
if (billingStatus === "billed") {
query.billId = { $not: null } ; <-- This does not work.
} else if (billingStatus === "unbilled") {
query.billId = null; <-- This works!
}
}
当我运行此代码时,将状态设置为&#34; billed,&#34;没有错误被抛出。然而,没有&#34;交易&#34;也被退回。抛出错误:&#34;无法读取属性&#39;长度&#39;未定义的。&#34;
如何修复破损的部分?
编辑:顺便说一句,共有5条记录,其中1条是结算。当它工作时,我应该收到1条记录。