在mongodb(或java)中按数组查找对象(Find objects by array in mongodb (or java))
我有一个像这样的集合(数据集):
{ "_id" : ObjectId("515611c1c6e3718ee42a5655"), "id": "Product1", "type": "ProductType4" "productFeature": [ { "id": "ProductFeature1" }, { "id": "ProductFeature2" }, { "id": "ProductFeature3" } ] "productPropertyNumeric": 25 }, ... and more product objects... { "_id" : ObjectId("515611c1c6e3718ee42a5666"), "id": "ProductFeature1", "label": "blablabla" }, { "_id" : ObjectId("515611c1c6e3718ee42a5667"), "id": "ProductFeature2", "label": "blebleble" }, { "_id" : ObjectId("515611c1c6e3718ee42a5668"), "id": "ProductFeature3", "label": "blublublu" } ... and more feature objects...根据Product1,我必须在其“productFeature”数组中找到特定产品的功能和标签。
我已经尝试在Mongo shell中找到它们(例如使用变量):
var aaa = db.dataset.find({ id: "Product1" }) db.dataset.find({ id: "aaa.productFeature.id" })但它不起作用。 如果有人知道如何通过数组查找对象请帮助我。 非常感谢。
PS:在Java中最好 - 我只应用一个查询:
BasicDBObject query = new BasicDBObject(); query.put("type","ProductType4"); query.put("productPropertyNumeric", new BasicDBObject("$gt", 10)); DBCursor cursor = coll.find(query).sort( new BasicDBObject("label", 1)); while (cursor.hasNext()){ System.out.println(cursor.next().get("id")); }I've got a collection (dataset) like this:
{ "_id" : ObjectId("515611c1c6e3718ee42a5655"), "id": "Product1", "type": "ProductType4" "productFeature": [ { "id": "ProductFeature1" }, { "id": "ProductFeature2" }, { "id": "ProductFeature3" } ] "productPropertyNumeric": 25 }, ... and more product objects... { "_id" : ObjectId("515611c1c6e3718ee42a5666"), "id": "ProductFeature1", "label": "blablabla" }, { "_id" : ObjectId("515611c1c6e3718ee42a5667"), "id": "ProductFeature2", "label": "blebleble" }, { "_id" : ObjectId("515611c1c6e3718ee42a5668"), "id": "ProductFeature3", "label": "blublublu" } ... and more feature objects...According to Product1, I have to find the features and labels that the specific product has in its "productFeature" array.
I have tried in Mongo shell to find them (using a variable, for example):
var aaa = db.dataset.find({ id: "Product1" }) db.dataset.find({ id: "aaa.productFeature.id" })But it doesn't work. If somebody knows how to find objects by array please help me. Thanks very much.
PS: It would be best in Java - I apply a query just for example:
BasicDBObject query = new BasicDBObject(); query.put("type","ProductType4"); query.put("productPropertyNumeric", new BasicDBObject("$gt", 10)); DBCursor cursor = coll.find(query).sort( new BasicDBObject("label", 1)); while (cursor.hasNext()){ System.out.println(cursor.next().get("id")); }最满意答案
以下是我对自己问题的回答。 我希望这对某人有帮助。
BasicDBObject query = new BasicDBObject(); BasicDBObject field = new BasicDBObject(); query.put("id", "Product1"); field.put("id", 1); field.put("productFeature", 1); field.put("_id", 0); DBCursor cursor = coll.find(query, field); while (cursor.hasNext()) { BasicDBObject result = (BasicDBObject) cursor.next(); System.out.println(result); ArrayList<BasicDBObject> features = (ArrayList<BasicDBObject>) result.get("productFeature"); for (BasicDBObject embedded : features) { String featuresId = (String) embedded.get("id"); BasicDBObject query2 = new BasicDBObject(); BasicDBObject field2 = new BasicDBObject(); query2.put("id", featuresId); field2.put("id", 1); field2.put("label", 1); field2.put("_id", 0); DBCursor cursor2 = coll.find(query2, field2); while (cursor2.hasNext()) { System.out.println(cursor2.next()); } } }Here is my answer to my own question. I hope this helps to someone.
BasicDBObject query = new BasicDBObject(); BasicDBObject field = new BasicDBObject(); query.put("id", "Product1"); field.put("id", 1); field.put("productFeature", 1); field.put("_id", 0); DBCursor cursor = coll.find(query, field); while (cursor.hasNext()) { BasicDBObject result = (BasicDBObject) cursor.next(); System.out.println(result); ArrayList<BasicDBObject> features = (ArrayList<BasicDBObject>) result.get("productFeature"); for (BasicDBObject embedded : features) { String featuresId = (String) embedded.get("id"); BasicDBObject query2 = new BasicDBObject(); BasicDBObject field2 = new BasicDBObject(); query2.put("id", featuresId); field2.put("id", 1); field2.put("label", 1); field2.put("_id", 0); DBCursor cursor2 = coll.find(query2, field2); while (cursor2.hasNext()) { System.out.println(cursor2.next()); } } }更多推荐
发布评论