-1

假设架构是:

var Rows = mongoose.model('Rows', {   
    row1: String,
    row2: String
});

我将如何随机查询其中一行?例如:

var rand = Math.floor(Math.rand() * 2);
Rows.find({ "row" + rand: "sup" }, function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});

此代码出错SyntaxError: Unexpected token +

4

3 回答 3

6

试试看

var rand = Math.floor(Math.rand() * 2);

var objFind = {};
objFind["row" + rand] = "sup";

Rows.find(objFind, function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});
于 2013-08-21T18:20:41.660 回答
1

这不会给你预期的结果

Math.floor(Math.random() * 2)

要在 JavaScript 中获取随机数范围,您可能应该执行以下操作:

var randomWithRange = function (min, max) {
    return Math.random() * (max - min) + min;
};

在您的代码中使用它

var conditions = {};
conditions["row" + randomWithRange(1, 2)] = "sup";

Rows.find(conditions, function(err, result){ ... });
于 2013-08-21T18:20:29.067 回答
0

您不能通过使用快捷语法即时构建属性名称来创建 JavaScript 对象,它们必须是文字(字符串或数字):

var x = { "row1" : "sup" };

你可以这样做:

var x = {};
var rowNum = 1;
x["row" + 1] = "sup";

但是,表达查询的更简单的 Mongoose 方法是使用where文档):

var rand = Math.floor(Math.rand() * 2) + 1;
Rows.where("row" + rand, "sup").exec(function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});
于 2013-08-21T19:25:53.047 回答