collection.mapReduce(
"function () { emit('_id', this.sender === SENDER ? this.sender : this.recipient); }",
/* топорное решение, для ускорения можно использовать объект как промежуточное хранилище */
"function (key, value) { return value.filter((v, i, a) => a.indexOf(v) === i); }",
{
query: {"$or": [{"recipient": sender}, {"sender": sender}] },
out: { inline: 1 },
scope: {
SENDER: sender
}
}
);
{$where:"this.isDeleted == false"}
{isDeleted: false}
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
{
"_id": ObjectId("530824b95f44eac1068b45c8"),
"accs": {
"boss": {
"name": "Stefan",
"roles": ["admin", "ceo"]
}
},
"ingener": {
"name": "Jhon",
"roles": ["user", "staff"]
}
}
{
"accs": {
"boss": {
"roles": ["ceo"]
}
}
}
function getTesters (cb) {
var testres = [];
Test.find({number: 1}).toArray(function (err, test) {
test.forEach(function(doc){
for(var i in doc.other) { // "for in" очень плохое решение в плане скорости, я бы заменил на var keys = Object.keys(doc.other); for(var i = 0; i < keys.length; i++) { testres[keys[i]] = /* код*/ }
testres[i] = {
name: doc.other[i].test,
lastname: doc.other[i].test2,
number: doc.number
};
cb(err, testres);
}
});
});
}
product.find(function(err, products) {
async.each(products, function (product, cb) {
productInfo.find({product_id: product._id}, function(err, info) {
product.info = info;
cb(err);
});
}, function (err) {
def.resolve(products);
});
});
product.find(function(err, products) {
var p_ids = products.map(function (product) { // создаем массив id продуктов
return product._id;
});
productInfo.find({product_id : {$in: p_ids}}, function(err, infos) { // запрашиваем info для всех совпадающих id продуктов в массиве
var obj = infos.reduce(function(a, b) { // создаем коллекцию для быстрого поиска, где ключ - id продукта
return a[b.product_id ] = b;
}, {});
products.forEach(function (product) {
product.info = obj[product._id];
});
def.resolve(products);
}));
});