Azure DocuemntDB中的Mongoose $ ne

时间:2017-03-29 01:47:03

标签: javascript mongodb mongoose azure-cosmosdb

我知道Azure中的DocumentDB不支持MongoDB支持的所有内容(尽管Ms一般声明它确实如此)。我想要做的是创建一个可以在使用MongoDB和DocumentDB之间切换的应用程序。我发现,当Mongoose传入时,DocumentDB基本上忽略了$ne运算符。

因此,当针对DocumentDB运行时,作为Mongoose .find查询中的过滤器运算符的以下代码行将返回所有内容,无论该记录是否已包含给定的rule._id。

WebsiteObj.SelectWebsite = function(rule, websiteUri, callback){
    Website.find(
        {websiteUri: websiteUri, 'rules': { '$ne': rule._id }},
        ['_id', 'websiteUri', 'ipAddress', 'createdAt'], function(err, websites){
        if(err) {
            callback(err);
                return;
            }
            callback(null, rule, websites);
    });
};

有没有办法让这项工作无需借助DocumentDB特定的查询?

1 个答案:

答案 0 :(得分:1)

我使用Mongoose($ne)测试了^4.9.2运算符和DocuemntDB,它对我有效。

这是我的完整代码示例

var mongoose = require('mongoose');
mongoose.connect('mongodb://my-user-name:my-password@my-host:10250/test/?ssl=true');

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected!

  var kittySchema = mongoose.Schema({
    name: String
  });

  var Kitten = mongoose.model('Kitten', kittySchema);

  var fluffy = new Kitten({ name: 'fluffy' });

  fluffy.save(function (err, fluffy) {
    if (err) return console.error(err);

    Kitten.find({name: { '$ne': 'fluffy' }}, function (err, kittens) {
      if (err) return console.error(err);
      console.log(kittens);
    })

  });

});

我运行代码时得到空数组。