Есть две коллекции.
inventory:
> db.inventory.find().pretty()
{
"_id" : 1,
"sku" : "almonds",
"description" : "product 1",
"instock" : 120
}
{ "_id" : 2, "sku" : "bread", "description" : "product 2", "instock" : 80 }
{
"_id" : 3,
"sku" : "cashews",
"description" : "product 3",
"instock" : 60
}
{
"_id" : 4,
"sku" : "pecans",
"description" : "product 4",
"instock" : 70
}
{ "_id" : 5, "sku" : null, "description" : "Incomplete" }
{ "_id" : 6 }
И orders:
> db.orders.find().pretty()
{ "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 }
{ "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 }
{ "_id" : 3 }
Я выполняю следующий запрос:
db.orders.find().forEach(
function (newOrders) {
newOrders.item = db.inventory.findOne({"sku": newOrders.item});
db.ordersRealoded.insert(newOrders);
}
)
Но после него выкидывается ошибка:
2018-08-07T14:18:10.868+0300 E QUERY [js] Error: error: {
"ok" : 0,
"errmsg" : "cannot compare to undefined",
"code" : 2,
"codeName" : "BadValue"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DBCommandCursor@src/mongo/shell/query.js:707:1
DBQuery.prototype._exec@src/mongo/shell/query.js:113:28
DBQuery.prototype.hasNext@src/mongo/shell/query.js:287:5
DBCollection.prototype.findOne@src/mongo/shell/collection.js:254:10
@(shell):3:18
DBQuery.prototype.forEach@src/mongo/shell/query.js:500:1
@(shell):1:1
В чём может быть трабл? Нужно, чтобы в новой коллекции было поле item со всеми значениями из inventory.sku.
Сейчас пытаюсь это сделать на простом примере, дабы разобраться со вложенными запросами. Буду рад, если покидаете ссылочек на какую-нибудь русскоязычную доку или тутор по этой теме.
Спасибо.