【问题标题】:How can I find an object (or objects) if an array field contains a value如果数组字段包含一个值,我如何找到一个对象(或多个对象)
【发布时间】:2016-06-17 20:27:19
【问题描述】:

正如你在标题中看到的,如果一个项目的数组类型字段包含 Mongoose 的指定值,我想查询项目。


我发现 mongo DB / Mongoose 提供了 '$in' 运算符来查找数组对象的值。

但 '$in' 运算符仅在相反的情况下有用(如果值的字段在数组中,则查找值)。


这是我写的一些模型代码。

// scheme/item.js
var mongoose = require('mongoose');
var model = new mongoose.Schema({

    item_id : Number,

    name : String,
    description : String,

    assigned : [ Number ]
});

module.exports = mongoose.model('item', model);

我想要做的是,如果设置了用户 ID,则查找 item.assigned 包含用户 ID 的所有项目。

【问题讨论】:

  • 你试过Item.find({assigned: userId})吗?
  • @chridam 我想你给了我一个正确的答案..真是救命稻草!!

标签: node.js mongodb mongoose


【解决方案1】:

要获取所有具有assigned 不为空的记录,您需要使用$ne 子句:

item.find({assigned: {$ne: null}});

【讨论】:

  • 对不起,但我想查找具有包含值的数组字段的记录,但只是所有不具有空字段的记录。这意味着项目的字段不应为空并且“包含值”。
  • 是的,抱歉我没听懂问题。
【解决方案2】:
item.find({'$and' : [{item_id : {$eq: req.session.user_id}}, {'assigned ' : {'$in' : [req.session.user_id]}}]})

我认为你可以使用$in,请阅读链接:https://docs.mongodb.org/manual/reference/operator/query/in/#op._S_in

【讨论】:

  • 在您发表评论后,我为模型和解释编辑了一些数据。实际上,Item.id 与这个问题无关(所以我编辑为“item_id”)。实际上,当用户的id带有一些对象(例如req.session.user_id)时,我想使用这个值进行查询。抱歉打错了:(
【解决方案3】:

根据@chridam 的评论,我发现 'Item.find({assigned : user_id })' 只是按照我的意图去做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多