gpt4 book ai didi

javascript - meteor.js 和 mongoDB - 多字段查询

转载 作者:可可西里 更新时间:2023-11-01 10:42:41 26 4
gpt4 key购买 nike

语境

我正在尝试创建一个搜索功能,允许用户填写多个字段、提交并查看来自一个集合的匹配项列表。我在前端使用一个表单来执行此操作,该表单在后端更新 session 变量,然后将其作为查询传递给 mongodb 集合。

它应该如何工作

如果用户提交 field 大小,则会显示该大小的 field 。如果仅输入位置,则显示该位置内的 field 。如果同时提交了大小和位置,则会显示符合这两个条件的场所。

实际工作原理

如果未填写任何内容,则按搜索会产生集合中的所有项目。同时提交位置和大小会产生符合这两个条件的 field 。但是,只填写一个字段而将另一个字段留空不会产生任何结果。我想知道为什么会这样——这几乎就像查询正在搜索一个字面上包含“”的字段......但是为什么在将两个字段都留空时我看不到这种行为?帮助非常感谢!

代码片段

//Search Form Helper
Template.managevenues.helpers({
venue: function () {

var venueNameVar = Session.get('venueNameVar');
var venueLocationVar = Session.get('venueLocationVar');

if(venueNameVar || venueLocationVar){
console.log(venueNameVar);
console.log(venueLocationVar);

return Venues.find({
venueName: venueNameVar,
'venueAddress.neighbourhood': venueLocationVar
});
} else {
return Venues.find({});
}
});

最佳答案

答案就在你的查询中

Venues.find({
venueName: venueNameVar,
'venueAddress.neighbourhood': venueLocationVar
});

如果您没有设置任何一个 vars,它将看起来像这样...

{
venueName: undefined,
'venueAddress.neighbourhood':'someVal'
}

因此它会匹配任何没有名称且位于某个街区的场所。

更好的方法是仅在有搜索值时才设置查询条件...

var query = {};
if(Session.get('venueNameVar')) {
query.venueName = Session.get('venueNameVar');
}
if(Session.get('venueLocationVar') {
query.venueAddress = {
neighbourhood : Session.get('venueLocationVar');
}
}
return Venues.find(query);

我认为这对您来说会更好一些!

关于javascript - meteor.js 和 mongoDB - 多字段查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com