2017-01-26 4 views
0
{ 
     "_id" : ObjectId("5888ae5f1495062544ac7951"), 
     "site" : "gfhfh", 
     "keywords" : { 
     "keyword 1" : { 
      "dailyranks" : { 
      "2017-01-28" : { 
       "rank" : 1, 
      } 
     **Dynamic data should add here by date ** 
      } 
     } 
     } 
    } 

Я попытался вставить ключевое слово по дате. Я хочу добавить ключевое слово в каждый день. но он не вставляет только дату и значения обновления. Я использовал следующий код в java.Как вставить динамические поля в документ в MongoDB Драйвер Java

for (DBObject dbo : result) { 
      DBObject keywordlist = (DBObject) dbo.get("keywords"); 
      BasicDBObject a = new BasicDBObject(); 
      for (String keyword : keywordlist.keySet()) { 
       DBObject rank = getRank(); 
       BasicDBObject rankdate = new BasicDBObject(date, rank); 
       BasicDBObject aa = new BasicDBObject("dailyranks", rankdate); 
       a.append(keyword, aa); 
      } 
      coll.update(dbo, new BasicDBObject("$set", new BasicDBObject("keywords", a)), true, false); 
} 

ответ

1

Похоже, вам нужен встроенный массив для обоих keywords и dailyranks.

"keywords": [{ 
    "keyword 1": { 
     "dailyranks": [{ 
      "2017-01-28": { 
       "rank": 1, 
      } 
     }] 
    } 
}] 

После того как вы эту структуру, вы будете использовать $push оператор, чтобы вставить новый rank в встроенный массив док.

Вы будете использовать $set, если вы попытаетесь заменить весь встроенный массив.

Смежные вопросы