Скажем, у меня есть следующие документы в коллекции MongoDB:
{
"recipeName": "barbecued chicken",
"author_id": "123"
}
{
"recipeName": "grilled steak",
"author_id": "123"
}
{
"recipeName": "pork and beans",
"author_id": "444"
}
{
"recipeName": "gravy",
"author_id": "333"
}
{
"recipeName": "corn chowder",
"author_id": "222"
}
{
"recipeName": "pork roast",
"author_id": "543"
}
Тогда у меня есть этот массив в javascript:
["grilled steak", "baked steak", "smothered steak"]
Я хочу узнать, соответствует ли какое-либо значение из моего массива рецептуName любого документа (в этом случае стейк на гриле будет соответствовать). Затем я хочу получить author_id для сопоставленного документа.
Я понимаю, что могу запросить имя рецепта для каждого элемента массива, но есть ли более эффективный способ сделать это? Этот массив может быть большим (в котором будет много запросов). Могу ли я проверить все элементы в моем массиве сразу, и если я получу совпадение, вернет мне author_id?
Это всего лишь пример, а не фактические данные: P. Спасибо заранее за любые предложения.
У меня в настоящее время это в цикле, но я ищу более эффективный способ...
mongo.connect(uristring, function (err, db) {
db.collection("recipes", function(err, collection) {
if (!err) {
collection.findOne({
'recipeName': recipeName
}, function (err, href) {
if (err) {
return false;
}
if (!href) {
return false;
}
return true;
});
} else {
console.log(5, 'DB error');
}
});
});
Вы можете использовать для этого оператор $in
:
collection.findOne({
recipeName: { $in: ["grilled steak", "baked steak", "smothered steak"] }
}, function (err, href) { ... });