为什么不能处理这个查询(MongoDB)

时间:2015-04-15 18:47:28

标签: mongodb

我有以下型号:

   {
"_id" : ObjectId("552ea1cd4ad5dbf56bf9b0ff"),
"nro_socio" : 112323,
"nombre" : "Martina Pardo",
"apellido " : "Biroccio",
"dni " : "27465789",
"direccion " : "Av. Rivadavia 123 1ro A",
"deporte " : [
    "RUGBY",
    "FUTBOL",
    "TENNIS"
],
"cuotas" : [
    {
        "nro_cuota" : 1,
        "fecha_emision" : ISODate("2015-03-10T06:01:17.171Z"),
        "fecha_vencimiento " : ISODate("2015-04-01T06:01:17.171Z"),
        "importe " : 325,
        "fecha_pago " : ISODate("2015-03-19T06:01:17.171Z")
    },
    {
        "nro_cuota " : 2,
        "fecha_emision " : ISODate("2015-04-10T06:01:17.171Z"),
        "fecha_vencimiento " : ISODate("2015-05-01T06:01:17.171Z"),
        "importe " : 325,
        "fecha_pago " : ISODate("2015-04-19T06:01:17.171Z")
    }
]

}

当我这样做时: db.socios.find({"cuotas.nro_cuota":1},{nombre:1}).pretty()

找到文件: { "_id" : ObjectId("552ea1cd4ad5dbf56bf9b0ff"), "nombre" : "Martina Pardo" }

当我这样做时: db.socios.find({"cuotas.nro_cuota":2},{nombre:1}).pretty()

我没有。 谁知道为什么?它的查询相同,只更改了数字......

我应该检索同一份文件,对吧?

提前致谢..

2 个答案:

答案 0 :(得分:1)

它是相同的查询,但你有不同的键,第二个数组中的另一个键在末尾有一个空格。所以,如果你这样做

db.socios.find({"cuotas.nro_cuota ":2},{nombre:1}).pretty()

你会得到一个匹配。

答案 1 :(得分:0)

这是因为" cuotas"是一个数组。你需要使用elemMatch。看这里:http://docs.mongodb.org/manual/reference/operator/query/elemMatch/#array-of-embedded-documents

db.socios.find({ "cuotas": { $elemMatch: { "nro_cuota": 2 } } }, {nombre:1})