【问题标题】:What's wrong with "$in" in mongoose猫鼬中的“$in”有什么问题
【发布时间】:2012-08-04 02:26:49
【问题描述】:

祝大家有美好的一天。我在使用 mongoose 时遇到了一个奇怪的错误

module.js:437
  var compiledWrapper = runInThisContext(wrapper, filename, tru
                        ^
SyntaxError: Unexpected token .
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (E:\Dropbox\Dropbox\FCP\server.js
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)

我猜它来自

dbQueries.remove({_id: {$in: {req.body.data}}, authorId: req.user._id}, function onRemoveSomething(err){
            if(err) {
                res.json({epicFail: 'ERR_RestrictedAccess'});
                return; 
            }
        });

所以,我不知道出了什么问题。

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    $in 接受一个数组,而不是一个格式无效的 javascript 对象

    {_id: {$in: [req.body.data]}
    

    或者如果 req.body.data 已经是一个数组,则省略包装 [ ]

    【讨论】:

    • Holly syncasis...非常感谢
    • 在节点重新启动几次后,它可以正常使用 {_id: {$in: req.body.data}
    • @andy-ray req.body.data 有一个元素时怎么办?基本上 req.body.data 的内容可以是单个元素,也可以是数组,我使用的是 in 运算符。这种情况应该怎么处理?
    • 为什么这个答案受到如此多的赞成?是否有一些教程在原始问题中列出了错误的语法?
    • 停止投票这个答案
    【解决方案2】:

    你必须检查req.body.data是否是一个数组,见下面的代码 {_id: {$in: _.isArray(req.body.data) ? req.body.data : [req.body.data] } //const _ = require('lodash');

    【讨论】:

      【解决方案3】:

      根据数据构建查询

      var match = {
          authorId: req.user._id
      };
      
      if(Array.isArray(data)) {
          match._id = {$in: data};
      } else {
         match._id = data;
      }
      
      dbQueries.remove(match, function findMyDocs(err, foundDocs) {
      
      });
      

      【讨论】:

        猜你喜欢
        • 2019-11-24
        • 2019-08-12
        • 1970-01-01
        • 2017-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-04
        相关资源
        最近更新 更多