是否可以在mongodb中的对象内检索对象数组中的特定值

时间:2013-12-19 14:38:33

标签: mongodb mongodb-query spring-data-mongodb

是否可以在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”)

2 个答案:

答案 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