我知道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特定的查询?
答案 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);
})
});
});
我运行代码时得到空数组。