我的数据库中有这样的结构:
{
{
"document_id" : 35,
"transport" : ["car", "plane", "train", "boat"]
},
{
"document_id" : 36,
"transport" : ["car", "bike", "train"]
}
}
我将如何进行搜索查询以查找带有例如运输“飞机”的文档/记录?
谢谢你的帮助。
史蒂文
要搜索包含元素的数组,您只需根据数组检查该元素。
所以,只需使用: -
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"]}
来自 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()));
}
@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);