yopp
протестировать конфигурацию вы можете локально
Pavel
спасибо
yopp
Ребят посоветуйте oodb
почему именно oodb?
Константин
А почему нет?
Константин
Ну или gui для db какой нибудь
Константин
http://oodb.ru/
😂😂😂
Nick
сам не знал что такое бывает)))
Nick
такой домен отжали
Assylbek
всем привет! ребята как в монго получить количество элементов в массиве, если элементы массива не строки, а объекты?
Assylbek
u menya versiya 3.2)
Assylbek
zaranee spasibo!
Anonymous
Привет. У меня такой вопрос, делаю запрос вида find({}).limit(10).sort({field: 1}) field - Number, может быть отрицательным, и есть не у всех документов. И в ответ на такой запрос приходят документы без этого поля. Как более настойчиво попросить вернуть мне только те, где это поле есть?
Nick
в find указат ьфильтр чтобы возвращалось только то тчо нужно
Anonymous
в find указат ьфильтр чтобы возвращалось только то тчо нужно
а как так можно делать? не могу найти подходящий оператор
Nick
$exists
Anonymous
$exists
о, тоже нашёл. Спасибо большое.
Георгий
???
Ищи метод .count
Nick
всем привет! ребята как в монго получить количество элементов в массиве, если элементы массива не строки, а объекты?
какая разница строки объекты числа? ты же работаешь с массивом а не с элементами
Anonymous
Подскажите, можно ли как то получить документ без массива который в нем?
Nick
ищите по find project
Nick
https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/
Bandikoot
Подскажите, можно ли как то получить документ без массива который в нем?
добавить projection в запрос: db.collection.find({some_query}, {array : 0}) https://docs.mongodb.com/manual/reference/method/db.collection.find/#find-projection
Anonymous
Спасибо.. а вообще это не лучшая практика делать такую вложенность?
Nick
вложенность значения не имеет, важно удобно ли вам работать с такой структурой
Bandikoot
вложенность значения не имеет, важно удобно ли вам работать с такой структурой
некоторую всё же имеет, при индексации полей, например
Nick
вот именно поэтмоу я и сказал про удобство, если данная структура не влияет на пляски вокруг составления запрсов, то и нормально
Nick
а что конкретно с индексами не так?
Bandikoot
насколько помню, индексы для полей массива строятся как при $unwind (на каждый элемент массива по одной записи в индексе). плохой идеей будет, например, пихать в документ массив с объектом, в котором ещё массив и индексировать поле самого вложенного объекта
Nick
возможно, но тут более глобвльный вопрос - неужели удобно работать с такой структурой? ИМХО вложенность больше трех это уже хреново, а массив внутри массива - это уже к переосмыслению структуры данных
Nick
ну и пусть этот ктото кусает кактусы сам, думаю индексация такой структуры это будет далеко не самая большая головная боль
yopp
всем привет! ребята как в монго получить количество элементов в массиве, если элементы массива не строки, а объекты?
https://docs.mongodb.com/manual/reference/operator/aggregation/size/ нет никакой разници какого типа элементы массива, оператор считает количество элементов
Vladimir
Кто чем с базой работает? У меня studio 3t лицуха закончилась, что ещё можно глянуть?
Александр
Добро пожаловать в наш клуб... Откапывай гденить старую версию.
Александр
Если на винде сидишь, могу дистрибутом поделиться.
Vladimir
ubuntu
Vladimir
Robo 3t поставил, пока не могу сравнивать
Maksim
Robo 3t поставил, пока не могу сравнивать
После Studio это как с BMW X6 нового на жигули пересеть 🙂
Assylbek
какая разница строки объекты числа? ты же работаешь с массивом а не с элементами
ну вот например оператор $size работает только со строковыми массивами... подскажите если знаете как
Nick
ну вот например оператор $size работает только со строковыми массивами... подскажите если знаете как
{ "_id": ObjectId("5bf7f53c5eff4cca81bd96ef"), "v": [{ "a": 1 }, { "a": 2 }, { "a": 3 }, { "a": 4 }, { "a": 5 }, { "a": 6 }, { "a": 7 } ] } — .aggregate([ {$project:{_id:1,size:{$size:"$v"}}} ]) — { "_id" : ObjectId("5bf7f53c5eff4cca81bd96ef"), "size" : 7 }
Nick
size считает содержимое массива независимо от типа
Assylbek
size считает содержимое массива независимо от типа
даже если элементы массива объекты?
Nick
именно, собственно пример выше я только что попробовал на монге версии 3.4
Nick
даже если элементы массива объекты?
впринципе можете просто взять что я там выше скинул и повторить, вставить первый док в пустую коллекцию, потом посчитать размер
Assylbek
ok
Assylbek
щас попробую
Assylbek
спасибо
Assylbek
не получается
Assylbek
у меня версия 3.2
Nick
как вы вставляете док что у вас все сломалось?
Nick
по спеке сайз появился еще в 2.6
Assylbek
Ищи метод .count
каунт выше 3.4, а у меня 3.2
Nick
не получается
вы вставляли в чистую коллекцию один объект первый что я скинул выше?
Георгий
каунт выше 3.4, а у меня 3.2
А ты не можешь например просто получить массив объектов, так как это массив просто узнать длину массива вот и получишь количество))
Георгий
Строки или объекты в массиве все равно являются элементом массива))
Assylbek
как вы вставляете док что у вас все сломалось?
{ "_id" : ObjectId("5b5fdc96d5ef0c11dfd6c218"), "_class" : "", "number" : "П-2072", "isAvailabilityOnReg" : false, "createdDate" : ISODate("2018-07-31T03:50:46.235Z"), "authorIin" : "123456789001", "authorPositionId" : "id_84", "version" : NumberLong(2), "type" : "OUTBOX", "executionTypeId" : "INTERNAL", "lastModifiedDate" : ISODate("2018-07-31T04:20:44.595Z"), "hasRemoteInternalExecutions" : false, "statusTypeList" : [ NumberLong(8) ], "exemplars" : [ { "_id" : ObjectId("5b5fdc96d5ef0c11dfd6c21a"), "number" : 1, "typeId" : NumberLong(1), "locationInfo" : { "_id" : ObjectId("5b5fe326d5ef0c11df6ad14a"), "sendDate" : ISODate("2018-07-31T04:18:46.147Z"), "positionId" : "id_50" }, "createInfo" : { "_id" : ObjectId("5b5fe326d5ef0c11df6ad149"), "createDate" : ISODate("2018-07-31T04:18:46.147Z"), "iin" : "123456789001" }, "defaultInserted" : true } ], "numberOfSheets" : 1, "registrationTypeId" : null, "subject" : null, "executionDate" : ISODate("2018-08-10T03:54:30.557Z"), "expertInfo" : null, "regUserIin" : null, "internalExeInfoList" : [ { "_id" : ObjectId("5b5fde2ad5ef0c11dfd6c58b"), "actionTypeId" : NumberLong(2), "result" : 1, "userPositionId" : "id_4", "processId" : "48689", "taskId" : "48692", "priority" : 1, "exemplarSendId" : "5b5fdc96d5ef0c11dfd6c21a", "closedDate" : ISODate("2018-07-31T04:20:44.577Z"), "executionDate" : ISODate("2018-07-31T04:20:44.577Z"), "isRefused" : false, "isClosedByParent" : false, "isAddByAuthor" : 0 }, { "_id" : ObjectId("5b5fe35ad5ef0c11df6ad2e0"), "actionTypeId" : NumberLong(3), "result" : 1, "documentId" : "5b5fdc96d5ef0c11dfd6c218", "userPositionId" : "id_50", "processId" : "48689", "taskId" : "48704", "parentId" : "5b5fde2ad5ef0c11dfd6c58b", "priority" : 1, "exemplarSendId" : "5b5fdc96d5ef0c11dfd6c21a", "description" : "приступить к заданию", "closedDate" : ISODate("2018-07-31T04:20:44.576Z"), "executionDate" : ISODate("2018-08-01T18:00:00.000Z"), "isRefused" : false, "isClosedByParent" : false, "isAddByAuthor" : 0 } ], "mainDocNumberOfSheets" : 1, "pointNumber" : null, "internalExecutionProcessId" : "48689", "recipients" : [], "returnedToInboxSigner" : null, "regDate" : ISODate("2018-07-31T04:18:46.141Z"), "description" : null, "relatedDocumentList" : null, "regUserPosition" : null, "content" : "высылаю договор скрепленный печатью", "regNumber" : "95/01-НС", "inboxExecutor" : null, "docTypeId" : NumberLong(2), "inboxSignerList" : null, "senders" : [], "attachNumberOfSheets" : 1, "secureClassId" : NumberLong(5), "languageId" : NumberLong(3), "externalExeInfoList" : [], "inboxRegNumber" : null, "hasDocTypeTemplate" : false, "autoRegisTemplateId" : NumberLong(34), "attrsOfAccessToDocs" : [], "inboxRegimeList" : [] }
Assylbek
db.getCollection('project').aggregate([ {$project:{_id:'$_id',size:{$size:"$internalExeInfoList"}}} ])
Assylbek
{ "_id" : ObjectId("5b5fdc96d5ef0c11dfd6c218"), "_class" : "", "number" : "П-2072", "isAvailabilityOnReg" : false, "createdDate" : ISODate("2018-07-31T03:50:46.235Z"), "authorIin" : "123456789001", "authorPositionId" : "id_84", "version" : NumberLong(2), "type" : "OUTBOX", "executionTypeId" : "INTERNAL", "lastModifiedDate" : ISODate("2018-07-31T04:20:44.595Z"), "hasRemoteInternalExecutions" : false, "statusTypeList" : [ NumberLong(8) ], "exemplars" : [ { "_id" : ObjectId("5b5fdc96d5ef0c11dfd6c21a"), "number" : 1, "typeId" : NumberLong(1), "locationInfo" : { "_id" : ObjectId("5b5fe326d5ef0c11df6ad14a"), "sendDate" : ISODate("2018-07-31T04:18:46.147Z"), "positionId" : "id_50" }, "createInfo" : { "_id" : ObjectId("5b5fe326d5ef0c11df6ad149"), "createDate" : ISODate("2018-07-31T04:18:46.147Z"), "iin" : "123456789001" }, "defaultInserted" : true } ], "numberOfSheets" : 1, "registrationTypeId" : null, "subject" : null, "executionDate" : ISODate("2018-08-10T03:54:30.557Z"), "expertInfo" : null, "regUserIin" : null, "internalExeInfoList" : [ { "_id" : ObjectId("5b5fde2ad5ef0c11dfd6c58b"), "actionTypeId" : NumberLong(2), "result" : 1, "userPositionId" : "id_4", "processId" : "48689", "taskId" : "48692", "priority" : 1, "exemplarSendId" : "5b5fdc96d5ef0c11dfd6c21a", "closedDate" : ISODate("2018-07-31T04:20:44.577Z"), "executionDate" : ISODate("2018-07-31T04:20:44.577Z"), "isRefused" : false, "isClosedByParent" : false, "isAddByAuthor" : 0 }, { "_id" : ObjectId("5b5fe35ad5ef0c11df6ad2e0"), "actionTypeId" : NumberLong(3), "result" : 1, "documentId" : "5b5fdc96d5ef0c11dfd6c218", "userPositionId" : "id_50", "processId" : "48689", "taskId" : "48704", "parentId" : "5b5fde2ad5ef0c11dfd6c58b", "priority" : 1, "exemplarSendId" : "5b5fdc96d5ef0c11dfd6c21a", "description" : "приступить к заданию", "closedDate" : ISODate("2018-07-31T04:20:44.576Z"), "executionDate" : ISODate("2018-08-01T18:00:00.000Z"), "isRefused" : false, "isClosedByParent" : false, "isAddByAuthor" : 0 } ], "mainDocNumberOfSheets" : 1, "pointNumber" : null, "internalExecutionProcessId" : "48689", "recipients" : [], "returnedToInboxSigner" : null, "regDate" : ISODate("2018-07-31T04:18:46.141Z"), "description" : null, "relatedDocumentList" : null, "regUserPosition" : null, "content" : "высылаю договор скрепленный печатью", "regNumber" : "95/01-НС", "inboxExecutor" : null, "docTypeId" : NumberLong(2), "inboxSignerList" : null, "senders" : [], "attachNumberOfSheets" : 1, "secureClassId" : NumberLong(5), "languageId" : NumberLong(3), "externalExeInfoList" : [], "inboxRegNumber" : null, "hasDocTypeTemplate" : false, "autoRegisTemplateId" : NumberLong(34), "attrsOfAccessToDocs" : [], "inboxRegimeList" : [] }
вот документ
Nick
а вы уверены что у всех документов это поел есть?
Nick
т.к. ваша агрегация выполняется на всех документах
Assylbek
щас попробую сначала $match использовать
Assylbek
думаете из за того что поле null?
Nick
вполне
Nick
с нулом неного другая ошибка будет
Nick
Assylbek
есть где массив пустой [ ]
Assylbek
вроде на это должен вернуть 0?
Nick
да
yopp
EOO это end of object. это вообще маркер конца «документа»
yopp
нет ли там {}?
yopp
разница между [] и {} исключительно в типе. массив это документ у которого ключ — индекс строкой :)
Alexander
Здравствуйте. Я использую mongoose. Не подскажете, могу ли я пушнуть за раз несколько элементов в массив? var res = await this.findOneAndUpdate({ id: 'tail' }, { $push: { tail: String(id) } }, { new: true }) Вот я бы хотел за одну транзакцию пушнуть несколько элементов в tail. Что-то не вышло нагуглить.
Георгий
Так tail у тебя же стринг🤔