Вот что мы придумали для копирования одного поля в другое для ~ 150_000 записей. Это заняло около 6 минут, но все еще значительно менее ресурсоемким, чем это было бы для создания экземпляра и повторения одного и того же количества объектов ruby.
js_query = %({
$or : [
{
'settings.mobile_notifications' : { $exists : false },
'settings.mobile_admin_notifications' : { $exists : false }
}
]
})
js_for_each = %(function(user) {
if (!user.settings.hasOwnProperty('mobile_notifications')) {
user.settings.mobile_notifications = user.settings.email_notifications;
}
if (!user.settings.hasOwnProperty('mobile_admin_notifications')) {
user.settings.mobile_admin_notifications = user.settings.email_admin_notifications;
}
db.users.save(user);
})
js = "db.users.find(#{js_query}).forEach(#{js_for_each});"
Mongoid::Sessions.default.command('$eval' => js)
Информация хранится в рамках изображения в формате под названием EXIF или текст ссылки. Там несколько библиотек, там способных к чтению этого формата, как этот
Вам, вероятно, нужно что-то для доступа к exif данным. Google предлагает эту библиотеку.
Дата хранится в данных EXIF в jpeg. Существует библиотека Java и средство просмотра в Java, который мог бы быть полезным.
Я пользуюсь этой библиотекой метаданных: http://www.drewnoakes.com/code/exif/
Кажется, работает вполне прилично, хотя принимают во внимание, что не все изображения JPEG имеют эту информацию, таким образом, это не может быть на 100% надежным.
Если метаданные EXIF не содержат созданную дату, то необходимо будет, вероятно, суметь обойтись lastUpdated Java - если Вы не хотите обратиться к Runtime.exec (...) и использующий системные функции для обнаружения (я не рекомендовал бы это, хотя!)
Пример кода ниже просит у пользователя путь к файлу и затем производит дату создания и время:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(final String[] args) {
try {
// get runtime environment and execute child process
Runtime systemShell = Runtime.getRuntime();
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter filename: ");
String fname=(String)br1.readLine();
Process output = systemShell.exec("cmd /c dir /a "+fname);
// open reader to get output from process
BufferedReader br = new BufferedReader (new InputStreamReader(output.getInputStream()));
String out="";
String line = null;
int step=1;
while((line = br.readLine()) != null )
{
if(step==6)
{
out=line;
}
step++;
} // display process output
try{
out=out.replaceAll(" ","");
System.out.println("CreationDate: "+out.substring(0,10));
System.out.println("CreationTime: "+out.substring(10,15));
}
catch(StringIndexOutOfBoundsException se)
{
System.out.println("File not found");
}
}
catch (IOException ioe){ System.err.println(ioe); }
catch (Throwable t) { t.printStackTrace();}
}
}