我有一个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的错误吗?
谢谢!
答案 0 :(得分:0)
我在测试$ nin时遇到了服务器错误。然后我尝试使用$并结合多个子查询,它工作正常。请使用以下代码查询包含在搜索中的过滤器的所有文档。
{ "filters": NumberInt(1), $and: [ { "filters": NumberInt(3) } ] }