Node.js Mongo在对象的内部和数组中查找多个匹配项
我所做的是在页面上列出客户输入的所有文档。然后我有多个搜索框,他们可以用来缩小文档范围。每个搜索框都绑定到一个字段。我希望能够搜索和缩小的结果,因为他们正在键入。我需要搜索的字段之一,作为包含其他对象的数组。如果他们搜索的字段位于对象的底部,但我无法找到搜索对象数组的方法,则我可以成功完成此操作。下面是完整对象的一个示例Node.js Mongo在对象的内部和数组中查找多个匹配项,node.js,mongodb,meteor,mongodb-query,Node.js,Mongodb,Meteor,Mongodb Query,我所做的是在页面上列出客户输入的所有文档。然后我有多个搜索框,他们可以用来缩小文档范围。每个搜索框都绑定到一个字段。我希望能够搜索和缩小的结果,因为他们正在键入。我需要搜索的字段之一,作为包含其他对象的数组。如果他们搜索的字段位于对象的底部,但我无法找到搜索对象数组的方法,则我可以成功完成此操作。下面是完整对象的一个示例 { "_id" : "fNgY9TcdCnyEFwePT", "companyCode" : "demoAccount1", "tripNumber" : 5002, "tri
{
"_id" : "fNgY9TcdCnyEFwePT",
"companyCode" : "demoAccount1",
"tripNumber" : 5002,
"tripNumberText" : "5002",
"custID" : "TnfFBRt3bZvNrSRB7",
"customerName" : "Am Transport Inc",
"orderLoadNum" : "50021321",
"orderPlacedDate" : ISODate("2016-01-27T08:00:00.000Z"),
"orderDispatch" : [
{
"Address" : "4111 Aurora Ave N",
"Appt" : "",
"Cases" : "",
"City" : "Seattle",
"Contact" : "",
"Customer" : "ABC 1",
"DatePuDel" : ISODate("2016-01-27T08:00:00.000Z"),
"Email" : "",
"Fax" : "",
"Notes" : "",
"ParsPaps" : "",
"Phone1" : "",
"Phone2" : "",
"Ref" : "",
"Skids" : "",
"State" : "WA",
"Suite" : "",
"Weight" : "",
"Zip" : "98103",
"carrierCharges" : "",
"carrierCurrency" : "CDN",
"carrierName" : "",
"driverName" : "",
"stop" : true,
"stopDelDate" : "",
"stopDelTime" : "",
"stopNum" : 0,
"stopPuDate" : "",
"stopPuTime" : "",
"stopType" : "pickup",
"trailerNum" : "",
"truckNum" : "",
"deliveryType" : "",
"deliveryStatus" : "Entered"
},
{
"Address" : "8325 Main St",
"Appt" : "",
"Cases" : "",
"City" : "Vancouver",
"Contact" : "",
"Customer" : "ABC 2",
"DatePuDel" : ISODate("2016-01-27T08:00:00.000Z"),
"Email" : "",
"Fax" : null,
"Notes" : "",
"ParsPaps" : "",
"Phone1" : "",
"Phone2" : "",
"Ref" : "",
"Skids" : "",
"State" : "WA",
"Suite" : "",
"Weight" : "",
"Zip" : "V5X 3M3",
"carrierCharges" : "",
"carrierCurrency" : "CDN",
"carrierName" : "",
"driverName" : "Test Driver 1",
"stop" : false,
"stopDelDate" : "",
"stopDelTime" : "",
"stopNum" : 1,
"stopPuDate" : "",
"stopPuTime" : "",
"stopType" : "delivery",
"trailerNum" : 4412,
"truckNum" : 101,
"stopMiles" : "182.2",
"deliveryType" : "Highway",
"deliveryStatus" : "Dispatched",
"truckNumText" : "101",
"trailerNumText" : "4412"
}
]
}
下面是我测试的内容。我现在只是想找出一种在orderDispatch中搜索多个字段的方法,然后我将在其他字段中添加回去
query = {"$and": [
{ "$elemMatch" :{"orderDispatch.trailerNumText": {$regex: new RegExp('^' + $('input:text[name=traceBoardTrailerNumSetting]').val(), 'i')}}},
{ "$elemMatch" :{"orderDispatch.carrierName": {$regex: new RegExp('^' + $('input:text[name=traceBoardCarrierSetting]').val(), 'i')}}},
{ "$elemMatch" :{"orderDispatch.truckNumText": {$regex: new RegExp('^' + $('input:text[name=traceBoardTruckSetting]').val(), 'i')}}}
]};
我尝试了很多方法,但似乎都不管用。如果您能指出正确的方向,我们将不胜感激。您的查询中存在语法错误: 对
$elemMatch
查询使用以下语法:
db.collectionName.find(
{"$and": [
{ "orderDispatch" : { "$elemMatch" :{ "trailerNumText": {$regex: new RegExp('^' + 'insert your value here', 'i')}}} },
{ "orderDispatch" : { "$elemMatch" :{ "carrierName": {$regex: new RegExp('^' + 'insert your value here', 'i')}}} },
{ "orderDispatch" : { "$elemMatch" :{ "truckNumText": {$regex: new RegExp('^' + 'insert your value here', 'i')}}} }
]}
)
为什么搜索多个字段时使用
$和
而不是$或
?它们不太可能同时包含相同的模式不?这就是重点。这将允许用户通过检查多个字段来大大缩小搜索范围。如果我使用或,则返回的数据将不会在中分区