请问我是否想要动态地查询集合。我有一个具有以下架构的集合。
Tripart_Property_Schema = new SimpleSchema({
"type" : {
type : String,
label : 'Property type',
},
"sale_lease" : {
type : String,
label : '',
},
"location" : {
type : Object,
label : '',
optional : true
},
"location.state" : {
type : String,
label : 'state',
},
"location.lga" : {
type : String,
label : 'lga',
optional : true
},
"location.address" : {
type : String,
label : 'address',
optional : true
},
"amount" : {
type : Object,
label : '',
optional : true
},
"amount.amount" : {
type : Number,
label : '',
optional : true
},
"amount.discount" : {
type : Number,
label : '',
optional : true
},
"active" : {
type : Boolean,
label : '',
optional : true
},
"views" : {
type : Number,
label : '',
optional : true
},
"date_added" : {
type : Date ,
label : '',
optional : true
},
"general_features" : {
type : [String],
label : '',
optional : true
},
"outdoor_features" : {
type : [String],
label : '',
optional : true
},
"indoor_features" : {
type : [String],
label : '',
optional : true
},
"other_facilities" : {
type : Object,
label : '',
optional : true
},
"other_facilities.bedroom" : {
type : Number,
label : '',
optional : true
},
"other_facilities.bathroom" : {
type : Number,
label : ' ',
optional : true
},
"other_facilities.garage" : {
type : Number,
label : '',
optional : true
},
"other_facilities.staffQuaters" : {
type : Number,
label : '',
optional : true
}
});
我创建了一个用户界面,用户可以使用任何可用字段组合查询数据。用户可以使用sale_lease
字段amount.amount
字段创建搜索属性的查询,并查询作为数组的general_features
字段。我不知道如何根据用户选择的首选项生成此查询。我知道如何执行查询,知道事先查询的字段,但使其动态是问题所在。
我正在尝试使用多个if
语句来查询所有可能的字段组合,但我有点意识到这不是实现此目的的方法。如果我可以指出正确的方向,我将非常感激。
答案 0 :(得分:0)
在不知道用户如何选择查询,集合名称等的细节的情况下,很难提供详细的示例;但是,您应该能够选择用户并将其转换为查询参数对象。例如,假设集合名称为Tripart_Property,如果用户选择sale_lease字段,则可以执行以下操作:
var saleLeaseSelection = argumentContainingSelectionFromUser;
var customQuery = { sale_lease: saleLeaseSelection };
Tripart_Property.find(customQuery);
这是一个非常基本的例子。 argumentContainingSelectionFromUser是来自用户选择的数据。您可能希望在服务器上构建一个可以从客户端调用的方法,该方法将从查询中返回结果,以便您可以将它们显示给用户,但这至少应该指向正确的方向。 / p>
答案 1 :(得分:0)
让我们假设您的集合有多个键,用户可以查询它们的任意组合,并且您想要结果的简单情况。典型的模式是:
let query = {}'
if ( $("#type").length ) query.type = $("#type").val();
if ( $("#sale_lease").length ) query.sale_lease = $("#sale_lease").val();
if ( $("#state").length ) query.location = { state: $("#state").val() };
return Tripart_Property.find(query);
为简单起见,上面假设您为每个搜索字段指定了一个等于相应架构字段的ID。您的命名约定可能会有所不同。
正如您所看到的,您从一个空白查询对象开始,然后查看每个搜索字段,如果它是非空白,那么您可以向与您要搜索的模式键对应的查询添加一个键。
凭借良好的命名约定和简单的字段结构,您甚至可以在js循环中执行此操作,因此每个键不需要一个if
语句。