jjzjj

node.js - Mongoose 聚合不支持 writeConcern

coder 2023-11-03 原文

我正在尝试计算给定用户有多少条未读通知。

也就是说,通过 aggregate,我已经在控制台中完成了输出预期结果的下一个代码:

db.getCollection('users').aggregate([
  { $match: { _id: ObjectId("5847f61a825d024ac9e3d08c")}},
  { $unwind: '$notifications'},
  { $match: {'notifications.read': {$eq: 0}}},
  { $group: { _id: '$_id', notifications: {$push: '$notifications._id'}}}])

哪些输出:

{
   "_id" : ObjectId("5847f61a825d024ac9e3d08c"),
   "notifications" : [ 
      ObjectId("5847fefb708b3b4c2cf9e8fe"), 
      ObjectId("5847fefe708b3b4c2cf9e900")
   ]
}

所以我尝试对 nodeJSmongoose 做同样的事情,所以我有一个模型和一个 static 方法与我上次查询中的相同:

var UserSchema = new mongoose.Schema({
  nickname: { type: String, trim: true},
  username: { type: String, trim: true },
  notifications: [{
    a: {
      _id: { type: mongoose.Schema.Types.ObjectId, ref: 'x' },
      x: { type: mongoose.Schema.Types.ObjectId, ref: 'y' }
    },
    b: {
      _id: { type: mongoose.Schema.Types.ObjectId, ref: 'y' },
      x: { type: mongoose.Schema.Types.ObjectId, ref: 'y' }
    },
    read: { type: Number, default: 0 }, // 0 - Unread, 1 - read
    ts: { type: Date, default: Date.now }
  }]
}, { timestamps: { createdAt: 'created_at' } });


UserSchema.statics.getCountNotifications = function (user_id) {
  return new Promise(function (resolve, reject) {
    mongoose.model('User', UserSchema).aggregate([
      { $match: { _id: mongoose.Types.ObjectId(user_id)}},
      { $unwind: '$notifications'},
      { $match: {'notifications.read': {$eq: 0}}},
      { $group: { _id: '$_id', notifications: {$push: '$notifications._id'}}}], function (err, data) {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });
  });
};

不幸的是,这会向我输出下一个错误:MongoError: Command does not support writeConcern。事实上,检查日志这是输出:

Unhandled rejection MongoError: Command does not support writeConcern
    at Function.MongoError.create (/Users/Project/api/node_modules/mongodb-core/lib/error.js:31:11)
    at /Users/Project/api/node_modules/mongodb-core/lib/connection/pool.js:462:72
    at authenticateStragglers (/Users/Project/api/node_modules/mongodb-core/lib/connection/pool.js:410:16)
    at .messageHandler (/Users/Project/api/node_modules/mongodb-core/lib/connection/pool.js:444:5)
    at Socket.<anonymous> (/Users/Project/api/node_modules/mongodb-core/lib/connection/connection.js:306:22)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:172:18)
    at Socket.Readable.push (_stream_readable.js:130:10)
    at TCP.onread (net.js:542:20)
From previous event:
    at Function.UserSchema.statics.getCountNotifications (/Users/Project/api/models/user.js:301:10)
    at /Users/Project/api/routes.js:563:8
    at Layer.handle [as handle_request] (/Users/Project/api/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/Project/api/node_modules/express/lib/router/route.js:131:13)
    at /Users/Project/api/models/user.js:179:7
    at JwtStrategy.strategy.success (/Users/Project/api/node_modules/passport/lib/middleware/authenticate.js:201:18)
    at verified (/Users/Project/api/node_modules/passport-jwt/lib/strategy.js:102:33)
    at /Users/Project/api/app.js:62:7
    at Query.<anonymous> (/Users/Project/api/node_modules/mongoose/lib/model.js:3336:16)
    at /Users/Project/api/node_modules/kareem/index.js:259:21
    at /Users/Project/api/node_modules/kareem/index.js:127:16
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

有什么帮助吗?

谢谢你的建议。

最佳答案

深入研究后,问题出在我的 mongoose 的版本上。更新到 4.7.1 并关注 mongoose 之后医生,它就像一个魅力。下面我留下我的代码的最终版本:

this.aggregate({ $match: { _id: mongoose.Types.ObjectId(user_id)}})
   .unwind('notifications')
   .match({ 'notifications.read': { $eq: 0 } })
   .group({ _id: '$_id', notifications: { $push: '$notifications._id'} })
   .exec();

关于node.js - Mongoose 聚合不支持 writeConcern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026170/

有关node.js - Mongoose 聚合不支持 writeConcern的更多相关文章

  1. ruby - 如何使用 readline 支持重新安装 ruby​​? - 2

    我已经按照https://github.com/wayneeseguin/rvm#installation上的说明通过RVM安装了Ruby.有关信息,我有所有文件(readline-5.2.tar.gz、readline-6.2.tar.gz、ruby-1.9.3-p327.tar.bz2、rubygems-1.8.24.tgz、wayneeseguin-rvm-stable.tgz和yaml-0.1.4.tar.gz)在~/.rvm/archives目录中,我不想在任何目录中重新下载它们方式。当我这样做时:sudo/usr/bin/apt-getinstallbuild-essent

  2. ruby-on-rails - "undefined method ` stub_request '"访问 RSpec 支持文件中的方法时 - 2

    我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re

  3. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  4. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  5. ruby - Rails Elasticsearch 聚合 - 2

    不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a

  6. ruby - Ruby 是否支持逐字字符串? - 2

    Ruby是否支持(找不到更好的词)非转义(逐字)字符串?就像在C#中一样:@"c:\ProgramFiles\"...或者在Tcl中:{c:\ProgramFiles\} 最佳答案 是的,您需要在字符串前加上%前缀,然后是描述其类型的单个字符。你想要的是%q{c:\programfiles\}。镐书很好地涵盖了这一点here,部分是通用分隔输入。 关于ruby-Ruby是否支持逐字字符串?,我们在StackOverflow上找到一个类似的问题: https:/

  7. c# - Ruby 等效于 C# Linq 聚合方法 - 2

    什么是Linq聚合方法的ruby​​等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj

  8. ruby - 在 Ruby 1.8 中支持 Ruby 1.9 的哈希语法 - 2

    我正在编写一个Rubygem,在我的代码中使用{key:'value'}哈希语法。我的测试都在1.9.x中通过,但我(可以理解)在1.8.7中得到syntaxerror,unexpected':',expecting')'。是否有支持1.8.x的最佳实践?我是否需要使用我们的老friend=>重写代码,还是有更好的策略? 最佳答案 我认为你运气不好,如果你想支持1.8,那么你必须使用=>。像往常一样,我会提到在1.9的某些情况下您必须使用=>:如果键不是一个符号。请记住,任何对象(符号、字符串、类、float……)都可以是Ruby哈

  9. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  10. ruby-on-rails - ruby open ssl api for encrypted key (without nodes option) - 2

    在安装了openssllib的linux机器上,当您执行带有“-nodes”选项的“opensslpkcs12”时,您将获得带有未加密私钥的输出,但如果您跳过–nodes选项,则输出将具有加密的私钥。e.g.opensslpkcs12-intest.pfx-outtest.pem你应该看到像下面这样加密的私钥-----BEGINENCRYPTEDPRIVATEKEY-----MIIFDjBABgkqhkiGG7s=-----ENDENCRYPTEDPRIVATEKEY-----如何使用ruby​​的开放ssl库实现上述目标?这就是我用ruby​​生成私钥的方式:@private_key

随机推荐