为什么我的Mongoose查找查询未返回预期数据?

时间:2019-07-03 13:36:39

标签: node.js mongodb mongoose

以下功能将返回特定类型的所有菜单项。这些类型存在于数据库中,但查询不返回任何数据。没有查询条件:{type:menuItem},它将返回具有类型的数据。

exports.get = async (menuItem) => {
    console.log(chalk.green('menuItem', menuItem));  

    try {      
        const menu = await Menu.find({type:menuItem});
        console.log('menu', menu);
        return menu;      
    } catch(error) {
        console.log(error)
    }    
}
如上功能所示,登录到控制台的

MenuItem会产生以下结果。问题似乎出在菜单项变量上,因为当我对{type:'pizza'}进行硬编码时,它可以工作。

console.log(chalk.green('menuItem', menuItem));  
menuItem 'pizza'

丑陋的查询字符串如下所示,这是否有问题:

private menuUrl = '/api/menu?menuItem="pizza"';

从数据库中采样数据:

{ quantity: 1,
    toppings: [ 'chipotle-steak', 'red-onions' ],
    _id: 5d163a7ae7179a4e432b501a,
    type: 'pizza',
    name: 'CHIPOTLE STEAK',
    price: 15,
    img: 'Chipotle-Steak.png',
}

2 个答案:

答案 0 :(得分:0)

type用于告知mongoose该特定字段的type。这就是为什么在猫鼬模式中使用type作为字段有时会表现得模棱两可的原因。

请将type更改为kind并使用{kind : menuItem}进行搜索,它应该对您有用。

不要忘记将所有文档从type更新为kind

要更新:

Menu.update({},{$rename : {'type' : 'kind'}},{multi:true})

然后使用kind

查找
const menu = await Menu.find({kind:menuItem});

答案 1 :(得分:0)

愚蠢的错误。 Angular查询字符串在披萨周围有单引号:

 private menuUrl = "/api/menu?menuItem='pizza'";

它应该没有引号:

 private menuUrl = "/api/menu?menuItem=pizza";