Mongoose - 这个额外的_id属性被添加到我的友谊属性中是什么?

时间:2016-10-30 23:36:25

标签: javascript node.js mongodb mongoose database

所以我之前遇到过这个问题,但现在我真的想把它弄平而又不再遇到它。我有一个用户架构,接受其他用户作为朋友。

然而,不只是添加一个朋友'具有单个对象类型的User模式的关键字:Schema.Types.ObjectId,ref:" User" ,我想包括其他属性,如友谊状态等。检查下面的代码。

    UserSchema = new Schema({
  email: {
    type: String,
    unique: true
  },
  name: {
    type: String,
    min: [1, "Name must be at least 1 character in length"],
    max: [18, "Name cannot exceed 18 characters in length"]
  },
  password: {
    type: String,
    min: [6, "Password must be at least 6 characters in length"],
    max: [18, "Password cannot exceed 18 characters in length"]
  },
  friendships: [
    {
      friend: {
        type: Schema.Types.ObjectId,
         ref: "User"
       },
       myGain: {
         type: Number,
         default: 0
       },
       myDebt: {
         type: Number,
          default: 0
        },
        status: {
          type: String,
          default: "pending"
        },
        requestor: {
          type: Number
        }
      }
    ]
});

正如您所看到的,友谊现在是一个数组,每个对象包含五个属性,第一个是“FRIEND'”。这是对User模型的实际引用,它将包含另一个用户。

我的问题是在做一些朋友的事情时开始让我感到困惑。

在我的控制器中,这就是我如何建立友谊。

const friendshipController = {
  create: function(req, res) {
    User.findByIdAndUpdate(req.params.id,
    { $push: { "friendships": {"friend": req.params.friendId } } }, {upsert: true}, function(err, user) {
      if (err) {
        console.log(err);
      } else {
        User.findByIdAndUpdate(req.params.friendId,
          { $push: { "friendships": {"friend": req.params.id } } }, {upsert: true}, function(err, user) {
            if (err) {
              console.log(err);
            } else {
              console.log("donezo");
            }
          }
        )
      }
    } )
  }
}

问题是当我查看mongo中的新记录时,它是以下内容:

password" : "password",
    "bets" : [ ],
    "friendships" : [
        {
            "friend" : ObjectId("581676fbfbbb9a43ac8c979d"),
            "_id" : ObjectId("58168257a7c4cb4512b1cafb"),
            "status" : "pending",
            "myDebt" : 0,
            "myGain" : 0
        }
    ],
    "__v" : 0

朋友下面的额外_id值是多少?那指的是什么?这是一个独特的价值,因为当我看到创建友谊的另一位朋友时,ObjectId值有点不同。 "朋友"的实际ObjectId值财产是我唯一想要的。这是正确的价值。该值(以979d结尾)引用另一位朋友。我只是不知道其他_id值是什么。

由于

1 个答案:

答案 0 :(得分:1)

是的,Mongoose会为您正在创建的每个子文档分配一个ObjectID,除非您告诉它不要。正如你所说,它“实际上只是隐含地指定”它。它是分配给您保存的一个关系对象的唯一值。