Запросы цепочки собственных драйверов Mongodb - PullRequest
1 голос
/ 05 мая 2020

Я новичок в запросах в mongodb. У меня есть такой документ -


{ 
   "_id" : ObjectId("5eb0f70f88cd051e7839325c"), 
   "id" : "1", 
   "arrayInfo" : [ {"color":"red"}, {"color":"black"}, {"color":"cyan"} ] 
}

Есть много документов в этом формате с изменяющимися идентификаторами и цветами внутри arrayInfo. Я хочу сделать что-то вроде -

Найти запись с идентификатором «1» -> Отобразить информацию об объекте внутри массива с помощью {"color": "cyan"}

Я считаю, что мне нужно связывать запросы после такого поиска -

db.collection('Records').findOne({id:"1"}).**something**

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Если оператор не указан, MongoDB по умолчанию выполняет сопоставление элементов массива, когда документ хранит массив. Таким образом, вы можете просто сделать:

MongoDB Enterprise ruby-driver-rs:PRIMARY> db.foo.findOne({id:'1',arrayInfo:{color:'cyan'}})
{
        "_id" : ObjectId("5eb0f70f88cd051e7839325c"),
        "id" : "1",
        "arrayInfo" : [
                {
                        "color" : "red"
                },
                {
                        "color" : "black"
                },
                {
                        "color" : "cyan"
                }
        ]
}

Чтобы сопоставить одно поле в массиве вместо полного элемента массива, используйте $ elemMatch .

0 голосов
/ 05 мая 2020

if(id===1){

res.arrayInfo.map(item => console.log(item.color))
}

db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
введите здесь описание ссылки
...