2016-08-18 3 views
1

Мне нужно вывести список значений эскиза, для которых нет даты рождения/null, учитывая только первую дату рождения в каждой tdata.Найти записи MongoDB, где пустое поле массива

Есть много полей в каждой коллекции, но я заинтересован только в двух из них:

{ 
    "sketchid": NumberLong(51148), 
    "tdata": "[ 
    { "birthdate": ["529718400"], ...}, 
    { "birthdate": null, ... } 
    ] 
} 

Мне нужно напечатать sketchid для каждого TDATA, в котором первая дата рождения является пустой.
Примечание: Один TDATA содержит много поля Даты рождения, мне нужно проверить только первый даты рождения поля и если оно пусто мне нужно вывести sketchid для этого набора.

Я пробовал это, но я не мог найти решение.

db.timeline.find({tdata:{birthdate:{$exists: true, “$ne”: null }}},{sketchid}) 

Для иллюстрации схемы данных, команды находки() (db.timeline.find().pretty()) дает следующий результат:

{ 
    "_id" : ObjectId("56ea7b9490e2a5b17c143b56"), 
    "sketchid" : NumberLong(51147), 
    "tdata" : "[{\\\"type\\\":\\\"dob\\\",\\\"title\\\":\\\"Vishakha Singh\\\",\\\"year\\\":null,\\\"color\\\":null,\\\"content\\\":\\\"\\\",\\\"birthdate\\\":[\\\"831254400\\\"],\\\"birthplace\\\":[\\\"Abu Dhabi, UAE\\\"],\\\"zodiac\\\":\\\"Taurus\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Cameo Role\\\",\\\"year\\\":[\\\"2014\\\"],\\\"color\\\":[\\\"#85330B\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Tamil movie Oru Oorla Rendu Raja"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Tamil movie Oru Oorla Rendu Raja<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Noticable Flick\\\",\\\"year\\\":[\\\"2013\\\"],\\\"color\\\":[\\\"#21C8F5\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Neetu in Fukrey"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Neetu in Fukrey<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Gained Recognition\\\",\\\"year\\\":[\\\"2010\\\"],\\\"color\\\":[\\\"#C90688\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Ashutosh Gowarikar\\'s Khelein Hum Jee Jaan Sey"]" data-sheets-userformat="[null,null,47617,[null,0],null,null,null,null,null,null,null,null,0,null,[null,2,721024],"sans-serif",11,null,1]">Ashutosh Gowarikar’s Khelein Hum Jee Jaan Sey<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Movie Debut\\\",\\\"year\\\":[\\\"2008\\\"],\\\"color\\\":[\\\"#FFCF00\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Hum Se Jahan"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Hum Se Jahan<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"quote-card\\\",\\\"title\\\":\\\"vishakha singh\\\",\\\"year\\\":null,\\\"color\\\":null,\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"I am not really sophisticated but happy and chilled out"]" data-sheets-userformat="[null,null,14915,[null,0],[null,2,16777215],null,null,null,null,0,null,null,0,null,[null,2,0],"helvetica",11]">I am not really sophisticated but happy and chilled out<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"}]" 
} 
{ 
    "_id" : ObjectId("56ea7b9490e2a5b17c143b57"), 
    "sketchid" : NumberLong(51148), 
    "tdata" : "[{\\\"type\\\":\\\"dob\\\",\\\"title\\\":\\\"Ali Fazal\\\",\\\"year\\\":null,\\\"color\\\":null,\\\"content\\\":\\\"\\\",\\\"birthdate\\\":[\\\"529718400\\\"],\\\"birthplace\\\":[\\\"Lucknow, Uttar Pradesh\\\"],\\\"zodiac\\\":\\\"Libra\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Bollywood Appearance\\\",\\\"year\\\":[\\\"2016\\\"],\\\"color\\\":[\\\"#C90688\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Anand L. Rai\\'s Happy Bhaag Jayegi"]" data-sheets-userformat="[null,null,47617,[null,0],null,null,null,null,null,null,null,null,0,null,[null,2,721024],"sans-serif",11,null,1]">Anand L. Rai’s Happy Bhaag Jayegi<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"English Movie\\\",\\\"year\\\":[\\\"2015\\\"],\\\"color\\\":[\\\"#FFCF00\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Special Appearance in Furious 7"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Special Appearance in Furious 7<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"First Lead Role\\\",\\\"year\\\":[\\\"2015\\\"],\\\"color\\\":[\\\"#B6D402\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Khamoshiyan"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Khamoshiyan<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Supporting Role\\\",\\\"year\\\":[\\\"2014\\\"],\\\"color\\\":[\\\"#FF2305\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Bobby Jasoos with Vidya Balan"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Bobby Jasoos with Vidya Balan<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"First Success\\\",\\\"year\\\":[\\\"2013\\\"],\\\"color\\\":[\\\"#85330B\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Fukrey"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Fukrey<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Bollywood Debut\\\",\\\"year\\\":[\\\"2009\\\"],\\\"color\\\":[\\\"#21C8F5\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Special Appearance in 3 Idiots"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Special Appearance in 3 Idiots<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"American Miniseries\\\",\\\"year\\\":[\\\"2009\\\"],\\\"color\\\":[\\\"#C90688\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Bollywood Hero"]" data-sheets-userformat="[null,null,513,[null,0],null,null,null,null,null,null,null,null,0]">Bollywood Hero<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"timeline\\\",\\\"title\\\":\\\"Screen Debut\\\",\\\"year\\\":[\\\"2008\\\"],\\\"color\\\":[\\\"#FFCF00\\\"],\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"Small role in the English language film The Other End of the Line"]" data-sheets-userformat="[null,null,309761,[null,0],null,null,null,null,null,null,null,null,0,null,[null,2,721024],"sans-serif",11,null,1,null,null,1]">Small role in the English language film The Other End of the Line<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"},{\\\"type\\\":\\\"quote-card\\\",\\\"title\\\":\\\"Ali Fazal\\\",\\\"year\\\":null,\\\"color\\\":null,\\\"content\\\":\\\"<p><span data-sheets-value="[null,2,"I love being in love."]" data-sheets-userformat="[null,null,14915,[null,0],[null,2,16777215],null,null,null,null,0,null,null,0,null,[null,2,4144959],"georgia",11]">I love being in love.<\\\\/span><\\\\/p>\\\\n\\\",\\\"birthdate\\\":null,\\\"birthplace\\\":null,\\\"zodiac\\\":\\\"Capricorn\\\"}]" 
} 

Когда я попытался следующими командами я получаю следующие ошибки

db.timeline.find({tdata:{"birthdate":{$exists: true, “$ne”: null }}},{sketchid}) 2016-08-19T12:02:14.665+0530 E QUERY [thread1] SyntaxError: illegal character @(shell):1:53

db.timeline.find({tdata:{"birthdate\\":{$exists: true, “$ne”: null }}},{sketchid}) 2016-08-19T12:02:53.357+0530 E QUERY [thread1] SyntaxError: unterminated string literal @(shell):1:25

db.timeline.find({tdata:{\\"birthdate\\":{$exists: true, “$ne”: null }}},{sketchid}) 2016-08-19T12:03:06.572+0530 E QUERY [thread1] SyntaxError: illegal character @(shell):1:25

+3

, пожалуйста, разместите результат в db.timeline.findOne() в своем вопросе, чтобы мы могли видеть формат вашей коллекции. Затем любезно объясните, что вы хотите запросить довольно простым способом. – Newton

+0

Привет, я опубликовал результат db.timeline.find(). Pretty() –

+0

являются \\\ в вашей tdata на самом деле частью коллекции только скопированной вещи? – Newton

ответ

0

Вам нужно использовать оператор позиционирования, если вы хотите проверить только первый элемент массива tdata. Также в зависимости от вашей версии {$ ne: null} не всегда дает то, что вы ожидаете. Вы можете проверить вместо нулевого типа 10:

db.timeline.find({"tdata.0.birthdate": {$exists:true,$not : { $type : 10 }} },{sketchid:1}) 
+0

Привет, я публиковал результат команды db.timeline.find(). Pretty() –

+1

кажется, что он не хочет проверять первый элемент массива, но он хочет, чтобы тест был первым родителем в массиве (где когда он может существовать) – Newton

+0

получать следующие ошибки> db.timeline.find ({tdata: {"birthdate": {$ exists: true, "$ ne": null}}}, {sketchid}) 2016-08-19T12: 02: 14.665 + 0530 E QUERY [thread1] SyntaxError: незаконный символ @ (оболочка): 1: 53> db.timeline.find ({tdata: {"дата рождения \\\": {$ существует: true, "$ ne" : null}}}, {sketchid}) 2016-08-19T12: 02: 53.357 + 0530 E QUERY [thread1] SyntaxError: unterminated string literal @ (shell): 1: 25> db.timeline.find ({tdata: {\\\ "дата рождения \\\": {$ exists: true, "$ ne ": null}}}, {sketchid}) 2016-08-19T12: 03: 06.572 + 0530 E QUERY [thread1] СинтаксисError: незаконный символ @ (shell): 1: 2 –

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