将文档与不包含数组中的值的字段匹配

时间:2015-10-22 11:33:38

标签: mongodb mongodb-query aggregation-framework

经过一些"匹配" db.collection.aggregate中的步骤我得到了

{_id: 1, field1: "a", field2: ["1.1.1", "1.1.2", "1.1.3", "1.1.4"]}
{_id: 2, field1: "b", field2: [         "1.1.2",          "1.1.4"]}
{_id: 3, field1: "c", field2: ["1.1.1", "1.1.2"                  ]}
{_id: 4, field1: "d", field2: [                           "1.1.4"]}
{_id: 5, field1: "e", field2: [                  "1.1.3"         ]}

//我预先格式化了

我想要应用另一条规则(我认为它将是" group"规则)汇总以获取所有文件" field2"不包含" 1.1.1"或" 1.1.4"。所以我需要没有" 1.1.1"或" 1.1.4"或(" 1.1.1" AND" 1.1.4")。

我想得到这样的东西:

{_id: 5, field1: "e", field2: [                  "1.1.3"         ]}

所以,我有field2,它是每个文档中的数组,我想获得给定数组中没有单个元素的所有文档(例如[" 1.1.1",&#34] ; 1.1.4"。])

P.S。我需要这个用于"单个语句聚合命令"。没有额外的JS接受。

UPD

@ blakes-seven,tnx

我的错误是我用过

{ "$match": { "field2": { "$elemMatch": { "$nin": ["1.1.1","1.1.4"] } } } }

但正确的事情就是使用

{ "$match": { "field2": {                 "$nin": ["1.1.1","1.1.4"] } } }

不要高估$ elemMatch:)

1 个答案:

答案 0 :(得分:1)

实际上,您只需要$nin中的$match

func (c *MyController) PrintPDF() {         
    pdf := gofpdf.New("", "", "", "")
    pdf.AddPage()
    pdf.Text(10, 20, "Circles")
    var b bytes.Buffer
    w := bufio.NewWriter(&b)
    pdf.Output(w)
    pdf.Close()
    w.Flush()
    c.Ctx.Output.ContentType("application/pdf")
    c.Ctx.Output.Body(b.bytes())
}

在你进入管道之前,甚至有更好的方法来获得这个结果,但由于你的问题没有解释,所以没有办法告诉你。