Azure Cosmos DB检查字段中的数组是否包含在搜索数组中

时间:2017-07-11 11:45:33

标签: mongodb azure azure-cosmosdb

我有一个Microsoft Azure CosmosDB MongoDB Api数据库,我正在尝试获取所有文档,其中一个数组字段完全包含在我的搜索数组中。

所以,我正在寻找的是,给定包含文档的集合测试: {"id":1,"filters":[1,2]} {"id":2,"filters":[1,3]}

如果我执行: db.test.find({"filters":{"$elemMatch":{$nin: [1,3]}}})

我回来了: {"id":1,"filters":[1,2]}

但是,如果我否定它,因为我希望所有带有过滤器的文档完全包含在我的搜索中,所以返回完整的文档列表。 db.test.find({"filters":{$not:{"$elemMatch":{$nin: [1,3]}}}})

返回:

{"id":1,"filters":[1,2]} {"id":2,"filters":[1,3]}

与文章中提到的相反: Check if every element in array matches condition

我也在聚合上尝试了$ issubset,但无效(0结果):

db.test.aggregate([{$match:{$issubset:["$filters",[1,3]]}}])

我甚至尝试过(0结果):

db.test.aggregate([{$match:{$issubset:[[1],[1,3]]}}])

任何想知道她正在发生什么的人?

  • 这是我的错误吗?

  • 列表项我是否使用过未在CosmosDB中实现的mongoDB功能?

  • 是CosmosDB的错误吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我在测试$ nin时遇到了服务器错误。然后我尝试使用$并结合多个子查询,它工作正常。请使用以下代码查询包含在搜索中的过滤器的所有文档。

{ "filters": NumberInt(1), $and: [ { "filters": NumberInt(3) } ] }