查询 MongoDB 中的精确匹配
Query Exact Matches in MongoDB
我正在开发一个 Web 应用程序功能,该功能可以根据数据库中以前的订单为用户建议价格。我正在使用 MongoDB NoSQL 数据库。在开始之前,我试图找出将订单对象设置为 return 正确结果的最佳方法。
当用户下达如下订单时:1 cheeseburger + 1 fry
、McDonalds
、12345 E. Street, MyTown, USA
...它应该只有 return 个完全匹配的对象数据库。
例如,我不想收到包含 1 cheeseburger + 1 fry + 1 shake
的订单。我将保留 运行 个订单的平均价格和数量。
{
restaurantAddress: "12345 E. Street, MyTown, USA",
restaurantName: "McDonald's",
orders: {
{ cheeseburger: 1, fries: 2 }
: {
sumPaid: 1444.55,
numTimesOrdered: 167,
avgPaid: 8.65 (gets recomputed w/ each new order)
},
{ // repeat for each unique item config },
{ // another unique item (or items) }
}
您认为这是在 MongoDB 中设置文档的有效且高效的方法吗?还是我应该使用多个文档?
如果这是有效的,我如何才能查询到 return 个确切的订单?我调查了 $eq
,但它似乎并不是我要找的东西。
所以我相信我们已经解决了这个问题。解决方案是在服务器端为订单创建一个唯一的字符串。例如,我们将编写一个函数,将 1 cheeseburger + 2 fries
转换为 burger1fries2
。为了保持数据库中的一致性,我们将首先按字母顺序对条目进行排序,因此我们将始终命中我们想要查询的内容。 2 fries + 1 cheeseburger
的类似顺序也会生成字符串 burger1fries2
。
我正在开发一个 Web 应用程序功能,该功能可以根据数据库中以前的订单为用户建议价格。我正在使用 MongoDB NoSQL 数据库。在开始之前,我试图找出将订单对象设置为 return 正确结果的最佳方法。
当用户下达如下订单时:1 cheeseburger + 1 fry
、McDonalds
、12345 E. Street, MyTown, USA
...它应该只有 return 个完全匹配的对象数据库。
例如,我不想收到包含 1 cheeseburger + 1 fry + 1 shake
的订单。我将保留 运行 个订单的平均价格和数量。
{
restaurantAddress: "12345 E. Street, MyTown, USA",
restaurantName: "McDonald's",
orders: {
{ cheeseburger: 1, fries: 2 }
: {
sumPaid: 1444.55,
numTimesOrdered: 167,
avgPaid: 8.65 (gets recomputed w/ each new order)
},
{ // repeat for each unique item config },
{ // another unique item (or items) }
}
您认为这是在 MongoDB 中设置文档的有效且高效的方法吗?还是我应该使用多个文档?
如果这是有效的,我如何才能查询到 return 个确切的订单?我调查了 $eq
,但它似乎并不是我要找的东西。
所以我相信我们已经解决了这个问题。解决方案是在服务器端为订单创建一个唯一的字符串。例如,我们将编写一个函数,将 1 cheeseburger + 2 fries
转换为 burger1fries2
。为了保持数据库中的一致性,我们将首先按字母顺序对条目进行排序,因此我们将始终命中我们想要查询的内容。 2 fries + 1 cheeseburger
的类似顺序也会生成字符串 burger1fries2
。