在我的数据库中有这样的结构记录:
{
"_id" : "YA14163134",
"discount" : "",
"retail" : "115.0000",
"cost" : "",
"description" : "Caterpillar Mens Big Twist Analog Watch",
"stock_update" : "05",
"brand" : "Kronos",
"img_url" : "image2342000.jpg",
"UPC" : "4895053708012",
"stock" : [ [ "1611292138", "5" ], [ "1612032232", "4" ], [ "1612050918", "0" ] ]
}
并寻找查询以获取所有包含" stock" " 1612050918"值。那是更新ID。
尝试类似:
db.vlc.find({stock: {$elemMatch:{$all:["1612050918"]}}})
或
db.vlc.find({stock: { $in : ['1611292138']}})
或
db.vlc.find({stock: { $all : [[1611292138]]}})
没有结果。只有当我在请求中包含第二个数组元素时才能工作
db.vlc.find({stock: { $all : [['1611292138', '7']]}})
但是当我需要任何数量时,这限制了我对使用qnty 7更新的所有项目的请求。提前谢谢!
答案 0 :(得分:1)
使用此查询:
{
"stock" : {
"$elemMatch" : {
"$elemMatch" : {
"$eq" : "1611292138"
}
}
}
}
说明:
如果你知道" 1611292138"将永远是子数组的第一个元素,您的查询变得更简单:
{ "stock" : { "$elemMatch" : { "0" : "1611292138" } } }
说明:
答案 1 :(得分:0)
使用嵌套$elemMatch
,如下所示:
db.vlc.find({stock: { "$elemMatch":{"$elemMatch":{"$all":["1612050918"]}}}})
或者
db.vlc.find({stock: {"$elemMatch":{ "$elemMatch":{"$in" : ["1612050918"]}}}})