mongodb 如何查询mongo文档中存在的数组中的特定值?

nqwrtyyt  于 2023-01-01  发布在  Go
关注(0)|答案(1)|浏览(170)

我在一个mongodb集合中有一堆文档,结构如下:

{
  "_id": {
    "$oid": "ddksdk"
  },
"date": {"$date": { "$numberLong": "1627862400000"}
},
"prices": [{"_id": {"$oid": "ddks11"}, "inventoryCode": "JFXS", "price": 52},
           {"_id": {"$oid": "ddks12"}, "inventoryCode": "USSW", "price": 102}]
}

我希望设置一条语句,以便获得具有特定日期的文档,并且在该date中,我希望通过prices数组中的inventoryCode进行过滤,以获得通过date和inventoryCode过滤的对象作为输出。
我尝试的查询如下所示:

{
  $and: [
    {
      date: { $eq: "2021-08-02T00:00:00.000+00:00") },
    },
    {
      prices: {
        $elemMatch: {
          inventoryCode: { $eq: "USSW" },
        },
      },
    },
  ],
}

使用这条语句,我实际上是按日期进行过滤,获得具有特定日期的相应文档,但我不是按特定的inventoryCode在数组中进行过滤。
我希望接收的预期输出为:

{"_id": {"$oid": "ddks12"}, "inventoryCode": "USSW", "price": 102}
balp4ylt

balp4ylt1#

质询

  • 保留具有特定日期的文档
  • 筛选器以仅保留那些具有inventoryCode= USSW的对象
  • 保留价格不为空的单据
  • 将根替换为prices的第一个成员(以获得预期输出)
  • 要快速添加一个索引上的日期id你没有

Playmongo

aggregate(
[{"$match":{"$expr":{"$eq":["$date", ISODate("2021-08-02T00:00:00Z")]}}},
 {"$set":
   {"prices":
     {"$filter":
       {"input":"$prices",
        "cond":{"$eq":["$$this.inventoryCode", "USSW"]}}}}},
 {"$match":{"$expr":{"$ne":["$prices", []]}}},
 {"$replaceRoot":{"newRoot":{"$first":"$prices"}}}])

相关问题