18

Вопрос по mongodb, java – Как я могу проверить, существует ли поле в MongoDB?

Я создал несколько документов и сумел выполнить несколько простых запросов, но не могу создать запрос, который бы находил документы, в которых поле просто существует.

Например, предположим, что это документ:

{  "profile_sidebar_border_color" : "D9B17E" , 
   "name" : "???? ???????" , "default_profile" : false , 
   "show_all_inline_media" : true , "otherInfo":["text":"sometext", "value":123]}

Теперь я хочу запрос, который принесет все документы, где текст вotherInfo есть что-то в этом.

если нет текста, тоotherInfo будет просто так:"otherInfo":[]

Итак, я хочу проверить существованиеtext поле вotherInfo.

Как мне этого добиться?

  • 0

    Не будет в запросе отфильтровать все элементы с текстовым значением

    см. Ниже.

    db.things.find({otherInfo:{$in: [text]}});
    
    BasicDBObject query = new BasicDBObject();
    query.put("otherInfo", new BasicDBObject("$in", "[text]"));
    var result = db.find(query);
    

  • 1

    Или вы можете использовать:

        import static com.mongodb.client.model.Filters.exists;
    
        Document doc = (Document) mongoCollection.find(exists("otherInfo")).first();
    

  • 0

    Вы можете использовать класс com.mongodb.QueryBuilder для построения з

    апроса, представленного в ответе Мэтта:

    QueryBuilder queryBuilder = QueryBuilder.start("otherInfo.text").exists(true);
    DBObject query = queryBuilder.get();
    DBCursor dbCursor = collection.find(query);
    

  • 53

    Вы можете использовать

    $exists оператор в сочетании с. нотации. Пустой запрос в mongo-shell должен выглядеть так:

    db.yourcollection.find({ 'otherInfo.text' : { '$exists' : true }})
    

    И тестовый пример на Java может выглядеть так:

        BasicDBObject dbo = new BasicDBObject();
        dbo.put("name", "first");
        collection.insert(dbo);
    
        dbo.put("_id", null);
        dbo.put("name", "second");
        dbo.put("otherInfo", new BasicDBObject("text", "sometext"));
        collection.insert(dbo);
    
        DBObject query = new BasicDBObject("otherInfo.text", new BasicDBObject("$exists", true));
        DBCursor result = collection.find(query);
        System.out.println(result.size());
        System.out.println(result.iterator().next());
    

    Выход:

    1
    { "_id" : { "$oid" : "4f809e72764d280cf6ee6099"} , "name" : "second" , "otherInfo" : { "text" : "sometext"}}