0

我在 Node.js 服务器上使用 Mongoose 将数据保存到 MongoDB。我想要做的是检查集合中是否已经存在模型对象。

例如继承人我的模型:

var ApiRequest = new Schema({
    route: String,
    priority: String,
    maxResponseAge: String,
    status: String,
    request: Schema.Types.Mixed,
    timestamp: { type: Date, default: Date.now }
});

这就是我想做的事情:

var Request = mongoose.model('api-request', ApiRequest);

function newRequest(req, type) {
    return new Request({
        'route' : req.route.path,
        'priority' : req.body.priority,
        'maxResponseAge' : req.body.maxResponseAge,
        'request' : getRequestByType(req, type)
    });
}

function main(req, type, callback) {
    var tempReq = newRequest(req, type);

    Request.findOne(tempReq, '', function (err, foundRequest) {
        // Bla bla whatever
        callback(err, foundRequest);
    });
}

我发现的大问题是 tempReq 是一个模型,它有一个 _id 变量和一个时间戳,它将与数据库中保存的不同。因此,我想忽略这些字段并通过其他所有内容进行比较。

请注意,我的实际模型比这有更多的变量,因此我不想使用 .find({ param : val, ....})..... 而是想将现有模型用于比较。

有任何想法吗?谢谢!

4

1 回答 1

1

您需要使用纯 JS 对象而不是 Mongoose 模型实例作为查询对象( 的第一个参数find)。

所以要么:

更改newRequest为返回一个普通对象,然后new Request()如果您需要将其添加到数据库中,则将其传递给调用。

或者

在您的main函数中变成tempReq这样的查询对象:

var query = tempReq.toObject();
delete query._id;
Request.findOne(query, ...
于 2013-10-11T19:27:07.133 回答