我只是想知道如何在一个对象数组中获取一个对象。我只需要那个对象。
这是集合:
{
"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")
}
答案 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")
}
]
}
这不是“整个集合”,而是“整个文档”,除非您使用“投影”过滤字段,否则默认情况下会获得。