【问题标题】:Mongodb in array query wont get any result数组查询中的MongoDB不会得到任何结果
【发布时间】:2017-08-12 00:37:49
【问题描述】:

好的,所以我通过以下查询获得所有会议:

return convensations.findOne({}).lean().then(function (convensations) {
console.log(convensations);
});

这将导致以下结果:

{ _id: 598dd4458b08b727dc53d4a6,
  initiateduser: 'spillinfo',
  gang: false,
  global: false,
  members: [ 'spillinfo', '59312d2b329b7535b07e273c' ],
  name: 'no name',
  __v: 0 }

完全没问题,但是当我这样做时

var userid = "59312d2b329b7535b07e273c";
      return convensations.find({members: userid}).lean().then(function (convensations) {
console.log(convensations);
});

它不会给我任何结果,这是为什么呢?

我在检查用户 ID 是否在成员数组中时做错了什么?

更新编辑:

数据库架构:

new Schema({
    initiateduser : String,
    name: {type:String, default: 'no name'},
    members: { type: Array, default: []},
    time: Number,
    global: { type: Boolean, default: false},
    gang: { type: Boolean, default: false},

});

以及插入/创建新的示例:

   var conv = new convensations();
            conv.members = [userid, user2];
            conv.initiateduser = userid;
            conv.save(function (err,room) {

编辑2:

来自查询的一些调试:

getting convensations with userid 59312d2b329b7535b07e273c
Mongoose: convensations.find({ members: ObjectId("59312d2b329b7535b07e273c") }, { fields: {} })
convensations: 0

【问题讨论】:

  • 对我来说很好用
  • 您是否将 ObjectId 保存在 memebers 数组中。请检查数据库内容
  • 数据库内容看起来不错。使用架构更新了 @Sajeetharan。
  • 更改您的架构并尝试作为成员:{ type: [string], default: []},
  • 为什么猫鼬将字符串转换为对象 id

标签: javascript mongodb mongoose mongodb-query


【解决方案1】:

将您的架构更改为,

new Schema({
    initiateduser : String,
    name: {type:String, default: 'no name'},
    members: { type: [String], default: []},
    time: Number,
    global: { type: Boolean, default: false},
    gang: { type: Boolean, default: false},

});

【讨论】:

  • 谢谢。顺便说一句,你知道我不能使用 $nin 成员的任何原因吗?r: $nin 需要一个数组
  • 不,你可以做到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多