在mongodb(或java)中按数组查找对象(Find objects by array in mongodb (or java))

编程入门 行业动态 更新时间:2024-10-26 16:30:07
在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()); } } }

更多推荐

本文发布于:2023-07-19 22:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1187975.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   对象   java   mongodb   objects

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!