聚合匹配pipe道不等于在MongoDB中

我正在为MongoDB的聚合pipe道,我试图检索用户不等于一个variables的项目。

出于某种原因,我无法做到这一点。 我试图以不同的可能方式使用$not$ne$nin ,但无法使其工作。

这是它的样子:

数据示例:

 [{ "_id": { "$oid": "565674e2e4b030fba33d8fdc" }, "user": { "$oid": "565674832b85ce78732b7529" } }, { "_id": { "$oid": "565674e2e4b030fba33d8fdc" }, "user": { "$oid": "565674832b85ce78732b7529" } }, { "_id": { "$oid": "565674e2e4b030fba33d8fdc" }, "user": { "$oid": "56f9dfc5cc03ec883f7675d0" } }] 

pipe道示例(简化了这个问题):

其中req.query.user.id = "565674832b85ce78732b7529"

 collection.aggregate([ { $match: { user: { $nin: [ req.query.user.id ], } } } ] 

这应该只返回最后一个项目。

你有任何想法如何检索不符合用户的数据?

谢谢

编辑:以下不工作:

 collection.aggregate([ { $match: { 'user.$oid': { $nin: [ req.query.user.id ], } } } ]); 

我也尝试过ObjectID()和mongodb抱怨: [MongoError: Argument must be a string]

 var ObjectID = require('mongodb').ObjectID; // Waterline syntax here MyCollection.native(function (err, collection) { collection.aggregate([ { $match: { 'user': { $nin: [ ObjectID(req.query.user.id) ], } } } ], function (err, result) { console.log(err, result); }); }); 

但是这条线在shell中工作:

 db.collection.aggregate([{$match:{"user":{"$nin":[ObjectId("565674832b85ce78732b7529")]}}}]) 

根据这里的答案,你可以改变

 var ObjectId = require('mongodb'). ObjectID; 

 var ObjectId = require('sails-mongo/node_modules/mongodb').ObjectID;