mongodb - 在 MongoDb 查询中使用 $map

标签 mongodb

有没有办法使用 $map常规 Mongo 文档查询中的运算符(或聚合 $match,我认为这是同一件事)。

因此,我正在尝试做的是:给定一组集合,如果其中任何一组是参数的子集,则返回文档。

例子:

假设我有三个文档:

{ x : [ ["A","B"] ] }
{ x : [ ["A", "D"] ] }
{ x : [ ["A","B"], ["A","D"] ] }

我有一个数组

auths = ["A","B","C"]

我想运行查询以获取第一个和第三个文档,因为它们都包含集合 ["A","B"]这是 auths 的子集, 但不是第二个文档,因为它的唯一集合包含 D这不在 auths 的集合中

如果我在 $redact 中这样做pipeline 我可以通过以下方式做到这一点:

{"$anyElementTrue" : {
    "$map" : { 
       "input": "$x",
       "as": "s",
       "in": { "$setIsSubset": ["$$s", auths] }
    }
 }}

但是当我尝试将其作为查询运行时,我得到了

BadValue unknown top level operator: $anyElementTrue 

最佳答案

您不能在 $match 阶段或查找查询中执行此操作。您将需要使用 $project 阶段来添加一个您可以$match 的字段:

> db.test.aggregate([
    { "$project" : { 
        "ok" : { "$map" : { "input" : "$x", "as" : "s", "in" : { "$setIsSubset" : [ "$$s", auths] } } }
    } },
    { "$match" : { "ok" : true } }
])

您可以调整 $project 以包含原始文档中的任何其他字段。

关于mongodb - 在 MongoDb 查询中使用 $map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352267/

相关文章:

javascript - 如何使用 MapReduce 和 Aggregate 进行相同的分析

gwt - 在 jetty 上部署 gwt web 应用程序

Spring Data MongoDB,如何设置SSL?

MongoDB:按日期字段搜索并按条件更新

mongodb - 将默认排序规则添加到现有的 mongodb 集合

node.js - Nodejs : TypeError: Object #<Object> has no method 'endianness'

ruby-on-rails - Mongoid 命名空间模型和继承

javascript - 没有字段名的Mongodb返回值

java - 如何使用 Java API 更新 MongoDB 中的嵌套实体

javascript - meteor 集合 find() 不检索任何数据