>  기사  >  데이터 베이스  >  MongoDB 고급 장 동적 필드 디자인

MongoDB 고급 장 동적 필드 디자인

零下一度
零下一度원래의
2018-05-17 14:00:502370검색

이 글은 주로 MongoDB고급 동적 필드 디자인 관련 정보를 소개합니다. 글의 소개는 매우 자세하며 필요한 모든 친구가 함께 배울 수 있는 참고 자료와 학습 가치가 있습니다.

이 글은 주로 MongoDB 동적 필드 디자인에 대한 관련 정보를 소개합니다. 모든 사람의 참고와 학습을 위해 공유됩니다. 필요한 친구들은 자세한 소개를 살펴보세요.

독자에게 적합

  • MongoDB 개발자

기본 요구사항

제품: "우리는 사용자가 원하는 것을 추가할 수 있는 훌륭한 기능을 기존 양식에 추가할 예정입니다. 필드 "

기술 목표 버전 1

저장 동적 양식 데이터(새 필드는 스키마를 수정할 필요가 없음)

우선 어떤 종류의 인덱스가 지원되는지 이야기해 봅시다. mongodb inaryordinary fields index

// 假如我们的文档长这样
{
 "name": "MongoDB",
 "age": 5
}

// 对age字段建立索引
{
 "age": 1
}
embedded document index

// 假如我们的文档长成了Object
{
 "person": {
  "age": 2,
  "name": "MongoDB"
 }
}

//对person.age字段建立索引
{
 "person.age": 1
}

array

hocument indexr

// 假如我们的文档长成了数组
{
 "persons": [
  { "name": "MongoDB", age: 5},
  { "name": "MySQL", age: 20}
 ]
}
//对persons.age字段建立索引
{
 "persons.age": 1
}
는 위의 어느 것도 역동적으로 필드를 추가하는 기능을 달성 할 수없는 것으로 보입니다. 프로그래머 S는 다음과 같은 대화를 나누었습니다.


프로그래머 A: "그러면 동적 콘텐츠를 저장하기 위해 다른 컬렉션을 추가해야 합니다."

    프로그래머 S: "하지만 관련 쿼리에 대한 MongoDB의 지원은 매우 약하고, 방법이 없습니다. 나중에 제품에 정렬, 필터링 기능이 추가된다고 했을 때 저희는 깜짝☹️, 아~ 이런 걸 알았더라면 MongoDB가 필요 없었을 텐데."
  • 요구 사항을 재검토

동적 양식 데이터를 저장하려면

    필터링 및 정렬을 지원해야 합니다
  • 기술 목표 버전2

필드를 추가하고 색인도 생성할 수 있습니다 솔루션


배열을 사용하여 동적 필드 저장

    설명 컬렉션 추가 사용자의 양식 구성을 기록하려면
  • 저장 구조는 다음과 같습니다.

    //描述collection 
    {
     "_id":"描述id",
     "type":"类型",
     "text": "订单名称",
     "default": "Default Name",
    }
    
    // 原本的表单增加字段form用来存储动态数据
    {
     "_id": "",
     "name": "一个好名字",
     "form":[
     { "_id":"描述_id", "value": 10},
     { "_id":"描述_id", "value": "我的好伙伴"},
     ]
    }

  • 주의!!! 사용자가 n개의 필드를 추가하면 설명 컬렉션은 n개의 문서를 동시에 추가합니다

쿼리, 정렬 및 필터링 방법

// 比如用户增加了2个字段
// 现在要对字段1进行排序
db.items.find().sort({"form.0.value":1})
// 对字段2进行筛选
db.items.find({"form.1.value":"我的好伙伴"})
위의 예에서 볼 수 있듯이 사용자가 필드 값을 입력하지 않더라도 모든 Document 양식 아래의 n번째 필드가 동일한 control
인지 확인하려면 null 값을 저장해야 합니다. 그래야 필드를 필터링 및 정렬하고 색인을 생성할 수 있습니다

계속해서 자세히 살펴보세요.
제품: "사용자가 드롭다운 상자와 다중 선택 상자를 추가할 수 있도록 허용해야 하며 필터링 및 정렬도 필요합니다."

프로그래머: "Fxxx"그러면 이러한 데이터는 어떻게 저장되어야 할까요? ?


해결 방법은 다음과 같습니다.


우리의 값은 1,2,4,8...

의 이진 형식으로 저장됩니다. 예를 들어
사용자는 다음 항목의 첫 번째 항목을 선택합니다. 다중 선택 상자에서 1이 저장되고, 두 번째 항목이 2로 저장되고, 세 번째 항목이 4로 저장됩니다


사용자가 다중 선택 상자의 첫 번째 항목 + 세 번째 항목을 선택하면 5가 저장됩니다. , (1+4)

MongoDB는 $bitsAllSet, $bitsAnySet, $bitsAllClear, $bitsAnyClear

db.items.aggregate([
 {
  "$match": {
  "$elemMatch": {
   "描述id": "id",
   "value": { $bitsAnySet: [ 1, 5 ] }
  }
 }}
])

를 포함한 Bitwise 쿼리 연산자 기능을 포함하는 강력한 집계 기능을 제공합니다. 위 내용은 MongoDB 동적 필드 사용의 다양한 측면을 완성합니다. 수요가 많은 디자인

위 내용은 MongoDB 고급 장 동적 필드 디자인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.