Для конкретности, как бы вы читали текстовую строку, выбирали и печатали одну случайную строку, когда вы не знаете заранее количество строк?
Да, это проблема из перламутра программирования, которую я путаю.
Решение выбирает первый элемент, затем выбирает второй с вероятностью 1/2, третий с 1/3 и так далее.
Алгоритм:
i = 0
while more input lines
with probability 1.0/++i
choice = this input line
print choice
Предположим, что окончательный выбор - 3-й элемент, вероятность - 1 x 1/2 x 1/3 x 3/4 x... x n-2/n-1 x n-1/n = = 1/2n? Но 1/n должно быть правильным.
-121--1660567-Возможно, пришло время, возможно, это я тону в разреженной документации и не могу обернуть голову вокруг концепции обновления в Mongoose:
Вот сделка:
У меня есть контактная схема и модель (укороченные свойства):
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var mongooseTypes = require("mongoose-types"),
useTimestamps = mongooseTypes.useTimestamps;
var ContactSchema = new Schema({
phone: {
type: String,
index: {
unique: true,
dropDups: true
}
},
status: {
type: String,
lowercase: true,
trim: true,
default: 'on'
}
});
ContactSchema.plugin(useTimestamps);
var Contact = mongoose.model('Contact', ContactSchema);
Я получаю запрос от клиента, содержащий необходимые поля, и использую свою модель таким образом:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
И теперь мы достигнем проблемы:
contact.save (функция (err) {...})
Я получу ошибку, если контакт с тем же номером телефона уже существует (как и ожидалось - уникальный) update ()
при контакте, так как этот метод не существует в документе Contact.update ({phone: request.phone}, contact, {upsert: true}, function (err {...})
{статус: request.status, телефон: request.phone...}
это работает - но тогда я не имею никакой ссылки на определенный контакт и не могу узнать createdAt
и свойства updatedAt
. Итак, в конце концов, я попытался: предоставив документ связаться
, как я могу обновить его, если он существует, или добавить его, если он не существует?
Спасибо за ваше время.