使用数组查找 mongodb 中的值

Find values in mongodb with array

我正在尝试从 mongodb table 中获取值,该值存储有关商店中盘点日期的数据(日期存储为字符串)以及 python。

存储在table中的数据:

{
    "_id" : ObjectId("5645f0443f32df13e0dc786e"),
    "RequiredDate" : "28-9-2015",
    "Name": "xyz"
}
{
    "_id" : ObjectId("5645f0c73f32df062064a0f6"),
    "RequiredDate" : "29-9-2015",
    "Name": "abc"
}

我想查找这两天需要的产品名称28-9-2015 & 29-9-2015

现在像这样单独做

db.stockdate.find({"RequiredDate": "28-9-2015"})
db.stockdate.find({"RequiredDate": "29-9-2015"})

我可以在单个查询中执行这些操作吗?有什么选择吗? 就像在单个查询中给出两个日期并得到与我通过两个查询得到的相同结果。

使用 $in 运算符。

db.stockdate.find({"RequiredDate": {$in: ["28-9-2015", "29-9-2015"]}})

此外,如果您只喜欢产品名称,可以使用

db.stockdate.distinct("Name", {"RequiredDate": {$in: ["28-9-2015", "29-9-2015"]}})

如果要根据日期对记录进行分组,则需要使用聚合:

db.stockdate.aggregate([
    {$match: {"RequiredDate": {$in: ["28-9-2015", "29-9-2015"]}}},
    {$group: {_id: "RequiredDate", Names: {$push: "$Name"}, count: {$sum: 1}}}
])

上面的聚合查询会产生这样的结果:

{
    "_id" : "28-9-2015",
    "Names": ["xyz"],
    "count": 1
}
{
    "_id" : "29-9-2015",
    "Names": ["abc", "def"],
    "count": 2
}

您可以向数组中添加任意多个日期,这将 return 将 reuiredDate 设置为任何这些日期的记录。