MONGO& Node.js:如何获取数组中的对象?

时间:2014-03-13 10:51:07

标签: javascript node.js mongodb

我只是想知道如何在一个对象数组中获取一个对象。我只需要那个对象。

这是集合:

{
    "net" : "192.168.1.1/24",
    "_id" : ObjectId("531d1c2d857831021c48e3af"),
    "ips" : [ 
        {
            "ips" : "192.168.1.1",
            "_id" : ObjectId("531d1c2d857831021c48e3b3")
        }, 
        {
            "ips" : "192.168.1.33",
            "_id" : ObjectId("531d1c2d857831021c48e3b2")
        }, 
        {
            "ips" : "192.168.1.38",
            "_id" : ObjectId("531d1c2d857831021c48e3b1")
        }, 
        {
            "ips" : "192.168.1.106",
            "_id" : ObjectId("531d1c2d857831021c48e3b0")
        }
    ],
    "__v" : 0
}

我需要带有“531d1c2d857831021c48e3b0”ID的对象,只获取该对象的句子是什么?我尝试使用db.nets.find({“ips._id”:ObjectId(“531d1c2d857831021c48e3b3”)})但我得到了整个集合。

非常感谢。

编辑。使用代码我收到:

db.nets.find(
      { 
     "_id": ObjectId("531d1c2d857831021c48e3af"),
     "ips._id": ObjectId("531d1c2d857831021c48e3b3") 
 },
 { "ips.$" : 1 }
 )

{
    "_id" : ObjectId("531d1c2d857831021c48e3af"),
    "ips" : [ 
        {}, 
        {}, 
        {}, 
        {}
    ]
}

但我想收到的是:

{
            "ips" : "192.168.1.33",
            "_id" : ObjectId("531d1c2d857831021c48e3b2")
        }

1 个答案:

答案 0 :(得分:1)

使用投影。 positional $运算符允许您只选择数组的匹配索引。

 db.nets.find(
     { 
         "_id": ObjectId("531d1c2d857831021c48e3af"),
         "ips._id": ObjectId("531d1c2d857831021c48e3b3") 
     },
     { "ips.$" : 1 }
 )

这给出了这样的回应:

{
    "_id" : ObjectId("531d1c2d857831021c48e3af"),
    "ips" : [
            {
                    "ips" : "192.168.1.1",
                    "_id" : ObjectId("531d1c2d857831021c48e3b3")
            }
    ]
}

这不是“整个集合”,而是“整个文档”,除非您使用“投影”过滤字段,否则默认情况下会获得。