提问者:小点点

查找具有包含特定值的数组的文档


如果我有这个模式。。。

person = {
    name : String,
    favoriteFoods : Array
}

。。。其中FavoriteFoods数组填充有字符串。我怎样才能找到所有人都有“寿司”作为他们最喜欢的食物使用猫鼬?

我希望有这样的东西:

PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});

(我知道mongodb中没有$contains,只是解释一下在知道解决方案之前我期望找到什么)


共3个答案

匿名用户

由于FavouriteFoods是一个简单的字符串数组,您可以直接查询该字段:

PersonModel.find({ favouriteFoods: "sushi" }, ...);

但我也建议在模式中显式地使用字符串数组:

person = {
    name : String,
    favouriteFoods : [String]
}

相关文档可以在这里找到:https://docs.mongodb.com/manual/tutorial/query-arrays/

匿名用户

MongoDB中没有$contains运算符。

你可以使用来自JohnnyHK的答案,因为这是可行的。与mongo包含的内容最接近的类比是$in,使用它,您的查询如下所示:

PersonModel.find({ favouriteFoods: { "$in" : ["sushi"]} }, ...);

匿名用户

我觉得$all在这种情况下更合适。如果你想找一个喜欢寿司的人,你可以:

PersonModel.find({ favoriteFood : { $all : ["sushi"] }, ...})

因为您可能希望筛选更多搜索,如:

PersonModel.find({ favoriteFood : { $all : ["sushi", "bananas"] }, ...})

$in类似于OR,$all类似于and。请查看:https://docs.mongodb.com/manual/reference/operator/query/all/