是否可以在mongodb中检索另一个对象内的对象数组中的特定值?
@Document
class vehicleStation {
@Id
String stationId;
List<car> cars;
}
@Document
class car{
@Id
String carNo;
String name;
}
我的json结构将如下所示
{ “_ ID”: “0001”, “汽车”:[{ “_ ID”: “C001”, “名称”: “本田”},{ “_ ID”: “C002”, “名称”: “福特”}]}
是否可以检索特定vehicleStation(stationId =“0001”和carNo =“C002”)的“名称”值,即“福特”
如何查询mongodb获取vehicleStation的值“Ford”(stationId =“0001”和carNo =“C002”)
答案 0 :(得分:2)
您可以使用$elemMatch projection运算符执行此操作。例如来自shell
> db.so.find({_id:"0001"},{cars:{$elemMatch:{"_id":"C002"}}})
{ "_id" : "0001", "cars" : [ { "_id" : "C002", "name" : "Ford" } ] }
答案 1 :(得分:2)
由于您在顶层执行_id查询,因此只返回一个文档。你可以做到
db.so.findOne({_id:"0001"},{cars:{$elemMatch:{"_id":"C002"}}}).cars[0]
获取内部对象或
db.so.findOne({_id:"0001"},{cars:{$elemMatch:{"_id":"C002"}}}).cars[0].name
只获取名称 注意 - 如果您有多个子对象,其中_id为C002,则只会将第一个匹配为documented。