聚合匹配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;