1

我的数据库中有这样的结构:

{
  {
     "document_id" : 35,
     "transport" : ["car", "plane", "train", "boat"]
  },

  {
     "document_id" : 36,
     "transport" : ["car", "bike", "train"]
  }
}

我将如何进行搜索查询以查找带有例如运输“飞机”的文档/记录?

谢谢你的帮助。

史蒂文

4

3 回答 3

3

要搜索包含元素的数组,您只需根据数组检查该元素。

所以,只需使用: -

db.collection.find({transport:"plane"})

会给你你想要的。

这是Java中的实现: -

BasicDBObject doc = new BasicDBObject("document_id", 35)
                             .append("transport", new String[] {"car", "plane"});

BasicDBObject doc2 = new BasicDBObject("document_id", 36)
                             .append("transport", new String[] {"car"});

coll.insert(doc);
coll.insert(doc2);

DBObject query = new BasicDBObject("transport", "plane");
DBCursor cursor = coll.find(query, new BasicDBObject("_id", 0));

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

输出 : -

{ "document_id" : 35 , "transport" : [ "car" , "plane"]}
于 2012-12-20T09:12:01.223 回答
3

来自 MongoShell

db.find({transport:"plane"})会做。

如果值是数组,MongoDB 将搜索整个数组以匹配查询。

使用 Java 驱动程序。

您首先获得 Mongo 收藏

List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
BasicDBObject dbo = new BasicDBObject();
dbo.append("transport", "plane");
DBCursor cur = collection.find(dbo);
while (cur.hasNext()) {
            list.add(JSONHelper.toJSON(cur.next().toMap()));
        }
于 2012-12-20T09:12:13.830 回答
0
@Document(collection = "document")
public class Transport {


private ObjectId document_id;

private ArrayList transport;



}


//

   List<String> list = new ArrayList<String>();
        list.add("car");
        list.add("plane");
        list.add("train");
        list.add("boat");

Transport transport;

transport.setTransport(list);
于 2015-01-27T06:56:51.400 回答