Node.js 使用筛选器的Mongo查询未获取准确结果?
My mongo表包含集合“商店”和如下数据:Node.js 使用筛选器的Mongo查询未获取准确结果?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,My mongo表包含集合“商店”和如下数据: { "ShopId" : 9999, "products" : [ { "productId" : "1234", "productName" : "abcd", }, { "productId" : "5678", "productName" : "abc", },
{
"ShopId" : 9999,
"products" : [
{
"productId" : "1234",
"productName" : "abcd",
},
{
"productId" : "5678",
"productName" : "abc",
},
{
"productId" : "2345",
"productName" : "def",
}
],
}
桌子上会有几家商店列出产品清单
要求:
我想获取shopId=9999且products与字符串abc匹配的记录
我的问题
问题:
它正在获取包含与productname:abc匹配的其他数据的productname:DEF 下面的代码为我在mongoshell上工作,您的代码给了我一个错误,$filter缺少'as'参数
db.Shops.aggregate([
{$match:{"ShopId":9999}},
{$project:{
products:{$filter:{input:'$products',as:"product",cond: { $eq: [ "$$product.productName", "abc" ] }}}
}}
])
不能将正则表达式搜索与$filter运算符一起使用。实现这一点的唯一方法是展开产品,过滤文档,然后将它们重新分组到一个数组中
model.Shops.aggregate([
{
$match:{
"ShopId":9999
}
},
{
$unwind:"$products"
},
{
$match:{
"products.productName":/abc/
}
},
{
$group:{
_id:null,
products:{
$push:{
"productName":"$products.productName",
"productId":"$products.productId"
}
}
}
}
])
输出:
{
"_id":null,
"products":[
{
"productName":"abcd",
"productId":"1234"
},
{
"productName":"abc",
"productId":"5678"
}
]
}
要将其与变量一起使用,请按如下方式声明正则表达式:
var regex: /abc/;
然后直接在查询中使用它
$match:{
"products.productName": regex
}
查询执行得很好。但我还有一个疑问。。如果我必须为match而不是“abc”放置一个公共变量。我应该在“/”之间放置什么。它是/searchValue/还是/+searchValue+/
$match:{
"products.productName": regex
}